diff --git a/CHANGES.md b/CHANGES.md
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -1,8 +1,29 @@
 * Hackage: <http://hackage.haskell.org/package/sbv>
-* GitHub:  <http://leventerkok.github.com/sbv/>
+* GitHub:  <http://leventerkok.github.io/sbv/>
 
-* Latest Hackage released version: 8.14, 2021-03-29
+* Latest Hackage released version: 8.15, 2021-05-30
 
+### Version 8.15, 2021-05-30
+
+  * Remove support for SFunArray abstraction. Turns out that the caching
+    mechanisms SBV used for SFunArray weren't entirely safe, and the code
+    has become unmaintainable over-time. Instead you should simply use
+    SArray, which has the exact same API. Thanks to frenchFrog42 on
+    github for reporting some of the problems.
+
+  * Fix the cmd line params for invocations of Boolector. You need
+    Boolector 3.2.2 to work with this version of SBV.
+
+  * NB. Recent releases of z3 no longer support optimization of real-valued
+    goals in the presence of strict inequalities, i.e., .> and .< operators.
+    So, you might get a bogus result if you are using optimization with
+    SReal parameters that have strict inequalities. See https://github.com/Z3Prover/z3/issues/5314
+    for details. There is not much SBV can do to prevent these, unfortunately,
+    as z3 optimization engine goals seem to have changed. Note that use of
+    non-strict inequalities (i.e., .>=, .<=, ./=) should be fine. Also, this
+    only impacts the optimize calls: regular sat/prove invocations are not
+    impacted.
+
 ### Version 8.14, 2021-03-29
 
   * Improve the fast all-sat algorithm to also support uninterpreted values.
@@ -267,7 +288,7 @@
     class which provided similar operations but only on
     predefined types. There is a new class called ByteConverter
     to convert to-and-from bytes for suitable bit-vector
-    sizes upto 512.
+    sizes up to 512.
 
   * Tuple construction functions are given new types to strengthen
     type checking. Previously the tuple argument was ignored,
@@ -760,7 +781,7 @@
 
   * Rework 'SFunArray' implementation, addressing performance issues. We now
     carefully memoize elements as we do the look-ups. This addresses several
-    perfomance issues that came up; hopefully providing some relief. The
+    performance issues that came up; hopefully providing some relief. The
     function 'mkSFunArray' is also removed, which used to lift Haskell
     functions to such arrays, often used to implement initial values. Now,
     if a read is done on an unwritten element of 'SFunArray' we get an
@@ -1659,7 +1680,7 @@
   * Add SWord32/SWord64 to/from SFloat/SDouble conversions, as bit-pattern reinterpretation; using the
     IEEE754 interchange format. The functions are: sWord32AsSFloat, sWord64AsSDouble, sFloatAsSWord32,
     sDoubleAsSWord64. Note that the sWord32AsSFloat and sWord64ToSDouble are regular functions, but
-    sFloatToSWord32 and sDoubleToSWord64 are "relations", since NaN values are not uniquely convertable.
+    sFloatToSWord32 and sDoubleToSWord64 are "relations", since NaN values are not uniquely convertible.
 
   * Add 'sExtractBits', which takes a list of indices to extract bits from, essentially
     equivalent to 'map sTestBit'.
@@ -2077,7 +2098,7 @@
     to the chosen solver as determined by the imported module. (The latter is
     useful for modifying options to the SMT solver in an solver-agnostic way.)
   * Various improvements to Z3 model parsing routines.
-  * New web page for SBV: http://leventerkok.github.com/sbv/ is now online.
+  * New web page for SBV: http://leventerkok.github.io/sbv/ is now online.
 
 ### Version 2.8, 2012-11-29
 
@@ -2280,7 +2301,7 @@
     a symbolic value under the given constraints. Useful for statistical
     analysis and probability computations.
   * When saturating provable values, use forAll_ for proofs and forSome_
-    for sat/allSat. (Previously we were allways using forAll_, which is
+    for sat/allSat. (Previously we were always using forAll_, which is
     not incorrect but less intuitive.)
   * add function:
       extractModels :: SatModel a => AllSatResult -> [a]
diff --git a/Data/SBV.hs b/Data/SBV.hs
--- a/Data/SBV.hs
+++ b/Data/SBV.hs
@@ -69,7 +69,7 @@
 --
 --   * 'SSet': Symbolic sets.
 --
---   * 'SArray', 'SFunArray': Flat arrays of symbolic values.
+--   * 'SArray': Arrays of symbolic values.
 --
 --   * Symbolic polynomials over GF(2^n), polynomial arithmetic, and CRCs.
 --
@@ -186,7 +186,7 @@
   -- ** Sets
   , RCSet(..), SSet
   -- * Arrays of symbolic values
-  , SymArray(readArray, writeArray, mergeArrays, sListArray), newArray_, newArray, SArray, SFunArray
+  , SymArray(readArray, writeArray, mergeArrays, sListArray), newArray_, newArray, SArray
 
   -- * Creating symbolic values
   -- ** Single value
@@ -744,7 +744,7 @@
 -}
 
 {- $strings
-Support for characters, strings, and regular expressions (intial version contributed by Joel Burget)
+Support for characters, strings, and regular expressions (initial version contributed by Joel Burget)
 adds support for QF_S logic, described here: <http://smtlib.cs.uiowa.edu/theories-UnicodeStrings.shtml>
 and here: <http://rise4fun.com/z3/tutorialcontent/sequences>. Note
 that this logic is still not part of official SMTLib (as of March 2018), so it should be considered
@@ -754,7 +754,7 @@
 -}
 
 {- $lists
-Support for symbolic lists (intial version contributed by Joel Burget)
+Support for symbolic lists (initial version contributed by Joel Burget)
 adds support for sequence support, described here: <http://rise4fun.com/z3/tutorialcontent/sequences>. Note
 that this logic is still not part of official SMTLib (as of March 2018), so it should be considered
 experimental.
diff --git a/Data/SBV/Control/Utils.hs b/Data/SBV/Control/Utils.hs
--- a/Data/SBV/Control/Utils.hs
+++ b/Data/SBV/Control/Utils.hs
@@ -1169,7 +1169,8 @@
 
                      let allModelInputs  = prefixExistentials qinps
                          -- Add on observables only if we're not in a quantified context:
-                         grabObservables = S.length allModelInputs == S.length qinps -- i.e., we didn't drop anything
+                         hasQuantifiers  = S.length allModelInputs /= S.length qinps -- i.e., we dropped something
+                         grabObservables = not hasQuantifiers
 
                          vars :: S.Seq (SVal, NamedSymVar)
                          vars = let mkSVal :: NamedSymVar -> (SVal, NamedSymVar)
@@ -1186,6 +1187,7 @@
 
 
                      -- We can go fast using the disjoint model trick if things are simple enough:
+                     --     - No quantifiers
                      --     - No uninterpreted functions (uninterpreted values are OK)
                      --     - No uninterpreted sorts
                      --
@@ -1198,7 +1200,7 @@
                      -- previous model and asking for a new one. If they don't exist (which is the common case anyhow)
                      -- we use an idea due to z3 folks <http://theory.stanford.edu/%7Enikolaj/programmingz3.html#sec-blocking-evaluations>
                      -- which splits the search space into disjoint models and can produce results much more quickly.
-                     let isSimple = null allUiFuns && null usorts
+                     let isSimple = null allUiFuns && null usorts && not hasQuantifiers
 
                          start = AllSatResult { allSatMaxModelCountReached  = False
                                               , allSatHasPrefixExistentials = w
diff --git a/Data/SBV/Core/Data.hs b/Data/SBV/Core/Data.hs
--- a/Data/SBV/Core/Data.hs
+++ b/Data/SBV/Core/Data.hs
@@ -44,7 +44,7 @@
  , SVal(..)
  , sTrue, sFalse, sNot, (.&&), (.||), (.<+>), (.~&), (.~|), (.=>), (.<=>), sAnd, sOr, sAny, sAll, fromBool
  , SBV(..), NodeId(..), mkSymSBV
- , ArrayContext(..), ArrayInfo, SymArray(..), SFunArray(..), SArray(..)
+ , ArrayContext(..), ArrayInfo, SymArray(..), SArray(..)
  , sbvToSV, sbvToSymSV, forceSVArg
  , SBVExpr(..), newExpr
  , cache, Cached, uncache, uncacheAI, HasKind(..)
@@ -79,8 +79,8 @@
 
 import qualified Data.Generics as G    (Data(..))
 
-import qualified Data.IORef         as R    (readIORef, newIORef)
-import qualified Data.IntMap.Strict as IMap (size, insert, empty)
+import qualified Data.IORef         as R    (readIORef)
+import qualified Data.IntMap.Strict as IMap (size, insert)
 
 import System.Random
 
@@ -591,49 +591,18 @@
 -- * Symbolic Arrays
 ---------------------------------------------------------------------------------
 
--- | Flat arrays of symbolic values
+-- | Arrays of symbolic values
 -- An @array a b@ is an array indexed by the type @'SBV' a@, with elements of type @'SBV' b@.
 --
 -- If a default value is supplied, then all the array elements will be initialized to this value.
 -- Otherwise, they will be left unspecified, i.e., a read from an unwritten location will produce
 -- an uninterpreted constant.
 --
--- While it's certainly possible for user to create instances of 'SymArray', the
--- 'SArray' and 'SFunArray' instances already provided should cover most use cases
--- in practice. Note that there are a few differences between these two models in
--- terms of use models:
---
---    * 'SArray' produces SMTLib arrays, and requires a solver that understands the
---      array theory. 'SFunArray' is internally handled, and thus can be used with
---      any solver. (Note that all solvers except 'Data.SBV.abc' support arrays, so this isn't
---      a big decision factor.)
---
---    * For both arrays, if a default value is supplied, then reading from uninitialized
---      cell will return that value. If the default is not given, then reading from
---      uninitialized cells is still OK for both arrays, and will produce an uninterpreted
---      constant in both cases.
---
---    * Only 'SArray' supports checking equality of arrays. (That is, checking if an entire
---      array is equivalent to another.) 'SFunArray's cannot be checked for equality. In general,
---      checking wholesale equality of arrays is a difficult decision problem and should be
---      avoided if possible.
---
---    * Only 'SFunArray' supports compilation to C. Programs using 'SArray' will not be
---      accepted by the C-code generator.
---
---    * You cannot use quickcheck on programs that contain these arrays. (Neither 'SArray'
---      nor 'SFunArray'.)
---
---    * With 'SArray', SBV transfers all array-processing to the SMT-solver. So, it can generate
---      programs more quickly, but they might end up being too hard for the solver to handle. With
---      'SFunArray', SBV only generates code for individual elements and the array itself never
---      shows up in the resulting SMTLib program. This puts more onus on the SBV side and might
---      have some performance impacts, but it might generate problems that are easier for the SMT
---      solvers to handle.
---
--- As a rule of thumb, try 'SArray' first. These should generate compact code. However, if
--- the backend solver has hard time solving the generated problems, switch to
--- 'SFunArray'. If you still have issues, please report so we can see what the problem might be!
+-- The reason for this class is rather historic. In the past, SBV provided two different kinds of
+-- arrays: an `SArray` abstraction that mapped directly to SMTLib arrays  (which is still available
+-- today), and a functional notion of arrays that used internal caching, called @SFunArray@. The latter
+-- has been removed as the code turned out to be rather tricky and hard to maintain; so we only
+-- have one instance of this class. But end users can add their own instances, if needed.
 --
 -- NB. 'sListArray' insists on a concrete initializer, because not having one would break
 -- referential transparency. See https://github.com/LeventErkok/sbv/issues/553 for details.
@@ -667,7 +636,7 @@
 --
 --   * Maps directly to SMT-lib arrays
 --
---   * Reading from an unintialized value is OK. If the default value is given in 'newArray', it will
+--   * Reading from an uninitialized value is OK. If the default value is given in 'newArray', it will
 --     be the result. Otherwise, the read yields an uninterpreted constant.
 --
 --   * Can check for equality of these arrays
@@ -675,8 +644,6 @@
 --   * Cannot be used in code-generation (i.e., compilation to C)
 --
 --   * Cannot quick-check theorems using @SArray@ values
---
---   * Typically slower as it heavily relies on SMT-solving for the array theory
 newtype SArray a b = SArray { unSArray :: SArr }
 
 instance (HasKind a, HasKind b) => Show (SArray a b) where
@@ -710,53 +677,3 @@
            mkNm (Just nm) _ = nm
            aknd = kindOf (Proxy @a)
            bknd = kindOf (Proxy @b)
-
--- | Arrays implemented internally, without translating to SMT-Lib functions:
---
---   * Internally handled by the library and not mapped to SMT-Lib, hence can
---     be used with solvers that don't support arrays. (Such as abc.)
---
---   * Reading from an unintialized value is OK. If the default value is given in 'newArray', it will
---     be the result. Otherwise, the read yields an uninterpreted constant.
---
---   * Cannot check for equality of arrays.
---
---   * Can be used in code-generation (i.e., compilation to C).
---
---   * Can not quick-check theorems using @SFunArray@ values
---
---   * Typically faster as it gets compiled away during translation.
-newtype SFunArray a b = SFunArray { unSFunArray :: SFunArr }
-
-instance (HasKind a, HasKind b) => Show (SFunArray a b) where
-  show SFunArray{} = "SFunArray<" ++ showType (Proxy @a) ++ ":" ++ showType (Proxy @b) ++ ">"
-
-instance SymArray SFunArray where
-  readArray   (SFunArray arr) (SBV a)             = SBV (readSFunArr arr a)
-  writeArray  (SFunArray arr) (SBV a) (SBV b)     = SFunArray (writeSFunArr arr a b)
-  mergeArrays (SBV t) (SFunArray a) (SFunArray b) = SFunArray (mergeSFunArr t a b)
-
-  sListArray :: forall a b. (HasKind a, SymVal b) => b -> [(SBV a, SBV b)] -> SFunArray a b
-  sListArray initializer = foldl (uncurry . writeArray) arr
-    where arr = SFunArray $ SFunArr ks $ cache r
-           where ks = (kindOf (Proxy @a), kindOf (Proxy @b))
-
-                 r st = do amap <- R.readIORef (rFArrayMap st)
-
-                           memoTable <- R.newIORef IMap.empty
-
-                           let k               = FArrayIndex $ IMap.size amap
-                               iVal            = literal initializer
-                               mkUninitialized = const (unSBV iVal)
-                               upd             = IMap.insert (unFArrayIndex k) (mkUninitialized, memoTable)
-
-                           k `seq` modifyState st rFArrayMap upd (return ())
-                           return k
-
-  newArrayInState :: forall a b. (HasKind a, HasKind b) => Maybe String -> Maybe (SBV b) -> State -> IO (SFunArray a b)
-  newArrayInState mbNm mbVal st = do mapM_ (registerKind st) [aknd, bknd]
-                                     SFunArray <$> newSFunArr st (aknd, bknd) (mkNm mbNm) (unSBV <$> mbVal)
-    where mkNm Nothing t   = "funArray_" ++ show t
-          mkNm (Just nm) _ = nm
-          aknd = kindOf (Proxy @a)
-          bknd = kindOf (Proxy @b)
diff --git a/Data/SBV/Core/Floating.hs b/Data/SBV/Core/Floating.hs
--- a/Data/SBV/Core/Floating.hs
+++ b/Data/SBV/Core/Floating.hs
@@ -239,14 +239,14 @@
   -- >>> prove $ roundTrip @Int32
   -- Falsifiable. Counter-example:
   --   s0 = RoundTowardNegative :: RoundingMode
-  --   s1 =           -44297675 :: Int32
+  --   s1 =           826336134 :: Int32
   --
   -- Note how we get a failure on `Int32`. The counter-example value is not representable exactly as a single precision float:
   --
-  -- >>> toRational (-44297675 :: Float)
-  -- (-44297676) % 1
+  -- >>> toRational (826336134 :: Float)
+  -- 826336128 % 1
   --
-  -- Note how the numerator is different, it is off by 1. This is hardly surprising, since floats become sparser as
+  -- Note how the numerator is different, it is off by 6. This is hardly surprising, since floats become sparser as
   -- the magnitude increases to be able to cover all the integer values representable.
   toSFloat :: SRoundingMode -> SBV a -> SFloat
 
@@ -279,16 +279,16 @@
   -- Q.E.D.
   -- >>> prove $ roundTrip @Int64
   -- Falsifiable. Counter-example:
-  --   s0 = RoundNearestTiesToAway :: RoundingMode
-  --   s1 =   -3871901667041025751 :: Int64
+  --   s0 = RoundNearestTiesToEven :: RoundingMode
+  --   s1 =   -2305879001039372796 :: Int64
   --
   -- Just like in the `SFloat` case, once we reach 64-bits, we no longer can exactly represent the
   -- integer value for all possible values:
   --
-  -- >>>  toRational (-3871901667041025751 :: Double)
-  -- (-3871901667041025536) % 1
+  -- >>>  toRational (-2305879001039372796 :: Double)
+  -- (-2305879001039372800) % 1
   --
-  -- In this case the numerator is off by 15.
+  -- In this case the numerator is off by 4.
   toSDouble :: SRoundingMode -> SBV a -> SDouble
 
   -- default definition if we have an integral like
diff --git a/Data/SBV/Core/Model.hs b/Data/SBV/Core/Model.hs
--- a/Data/SBV/Core/Model.hs
+++ b/Data/SBV/Core/Model.hs
@@ -865,7 +865,7 @@
   smin  :: a -> a -> a
   -- | Symbolic maximum.
   smax  :: a -> a -> a
-  -- | Is the value withing the allowed /inclusive/ range?
+  -- | Is the value within the allowed /inclusive/ range?
   inRange    :: a -> (a, a) -> SBool
 
   {-# MINIMAL (.<) #-}
@@ -2095,7 +2095,7 @@
     | ba == bb = listArray ba (zipWith (symbolicMerge f t) (elems a) (elems b))
     | True     = cannotMerge "'Array' values"
                              ("Branches produce different ranges: " ++ show (k ba, k bb))
-                             "Consider using SBV's native arrays 'SArray' and 'SFunArray' instead."
+                             "Consider using SBV's native 'SArray' abstraction."
     where [ba, bb] = map bounds [a, b]
           k = rangeSize
 
@@ -2252,11 +2252,6 @@
 -- When merging arrays; we'll ignore the force argument. This is arguably
 -- the right thing to do as we've too many things and likely we want to keep it efficient.
 instance SymVal b => Mergeable (SArray a b) where
-  symbolicMerge _ = mergeArrays
-
--- When merging arrays; we'll ignore the force argument. This is arguably
--- the right thing to do as we've too many things and likely we want to keep it efficient.
-instance SymVal b => Mergeable (SFunArray a b) where
   symbolicMerge _ = mergeArrays
 
 -- | Uninterpreted constants and functions. An uninterpreted constant is
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
@@ -43,8 +43,7 @@
   , svAddConstant, svIncrement, svDecrement
   , svFloatAsSWord32, svDoubleAsSWord64, svFloatingPointAsSWord 
   -- ** Basic array operations
-  , SArr(..),     readSArr,     writeSArr,     mergeSArr,     newSArr,     eqSArr
-  , SFunArr(..),  readSFunArr,  writeSFunArr,  mergeSFunArr,  newSFunArr
+  , SArr(..), readSArr, writeSArr, mergeSArr, newSArr, eqSArr
   -- Utils
   , mkSymOp
   )
@@ -53,9 +52,8 @@
 import Data.Bits (Bits(..))
 import Data.List (genericIndex, genericLength, genericTake)
 
-import qualified Data.IORef         as R    (modifyIORef', newIORef, readIORef)
-import qualified Data.Map.Strict    as Map  (toList, fromList, lookup)
-import qualified Data.IntMap.Strict as IMap (IntMap, empty, toAscList, fromAscList, lookup, size, insert, delete)
+import qualified Data.IORef         as R    (readIORef)
+import qualified Data.IntMap.Strict as IMap (size, insert)
 
 import Data.SBV.Core.AlgReals
 import Data.SBV.Core.Kind
@@ -1003,252 +1001,6 @@
   where c st = do ai <- uncacheAI a st
                   bi <- uncacheAI b st
                   newExpr st KBool (SBVApp (ArrEq ai bi) [])
-
--- | Arrays managed internally
-data SFunArr = SFunArr (Kind, Kind) (Cached FArrayIndex)
-
--- | Convert a node-id to an SVal
-nodeIdToSVal :: Kind -> Int -> SVal
-nodeIdToSVal k i = swToSVal $ SV k (NodeId i)
-
--- | Convert an 'SV' to an 'SVal'
-swToSVal :: SV -> SVal
-swToSVal sv@(SV k _) = SVal k $ Right $ cache $ const $ return sv
-
--- | A variant of SVal equality, but taking into account of constants
--- NB. The rationalCheck is paranoid perhaps, but is necessary in case
--- we have some funky polynomial roots in there. We do allow for
--- floating-points here though. Why? Because the Eq instance of 'CV'
--- does the right thing by using object equality. (i.e., it does
--- the right thing for NaN/+0/-0 etc.) A straightforward equality
--- here would be wrong for floats!
-svEqualWithConsts :: (SVal, Maybe CV) -> (SVal, Maybe CV) -> SVal
-svEqualWithConsts sv1 sv2 = case (grabCV sv1, grabCV sv2) of
-                               (Just cv, Just cv') | rationalCheck cv cv' -> if cv == cv' then svTrue else svFalse
-                               _                                          -> fst sv1 `svEqual` fst sv2
-  where grabCV (_,                Just cv) = Just cv
-        grabCV (SVal _ (Left cv), _      ) = Just cv
-        grabCV _                           = Nothing
-
--- | Read the array element at @a@. For efficiency purposes, we create a memo-table
--- as we go along, as otherwise we suffer significant performance penalties. See:
--- <http://github.com/LeventErkok/sbv/issues/402> and
--- <http://github.com/LeventErkok/sbv/issues/396>.
-readSFunArr :: SFunArr -> SVal -> SVal
-readSFunArr (SFunArr (ak, bk) f) address
-  | kindOf address /= ak
-  = error $ "Data.SBV.readSFunArr: Impossible happened, accesing with address type: " ++ show (kindOf address) ++ ", expected: " ++ show ak
-  | True
-  = SVal bk $ Right $ cache r
-  where r st = do fArrayIndex <- uncacheFAI f st
-                  fArrMap     <- R.readIORef (rFArrayMap st)
-
-                  constMap <- R.readIORef (rconstMap st)
-                  let consts = Map.fromList [(i, cv) | (cv, SV _ (NodeId i)) <- Map.toList constMap]
-
-                  case unFArrayIndex fArrayIndex `IMap.lookup` fArrMap of
-                    Nothing -> error $ "Data.SBV.readSFunArr: Impossible happened while trying to access SFunArray, can't find index: " ++ show fArrayIndex
-                    Just (uninitializedRead, rCache) -> do
-                        memoTable  <- R.readIORef rCache
-                        SV _ (NodeId addressNodeId) <- svToSV st address
-
-                        -- If we hit the cache, return the result right away. If we miss, we need to
-                        -- walk through each element to "merge" all possible reads as we do not know
-                        -- whether the symbolic access may end up the same as one of the earlier ones
-                        -- in the cache.
-                        case addressNodeId `IMap.lookup` memoTable of
-                          Just v  -> return v  -- cache hit!
-
-                          Nothing -> -- cache miss; walk down the cache items to form the chain of reads:
-                                     do let aInfo = (address, addressNodeId `Map.lookup` consts)
-
-                                            find :: [(Int, SV)] -> SVal
-                                            find []             = uninitializedRead address
-                                            find ((i, v) : ivs) = svIte (svEqualWithConsts (nodeIdToSVal ak i, i `Map.lookup` consts) aInfo) (swToSVal v) (find ivs)
-
-                                            finalValue = find (IMap.toAscList memoTable)
-
-                                        finalSW <- svToSV st finalValue
-
-                                        -- Cache the result, so next time we can retrieve it faster if we look it up with the same address!
-                                        -- The following line is really the whole point of having caching in SFunArray!
-                                        R.modifyIORef' rCache (IMap.insert addressNodeId finalSW)
-
-                                        return finalSW
-
--- | Update the element at @address@ to be @b@
-writeSFunArr :: SFunArr -> SVal -> SVal -> SFunArr
-writeSFunArr (SFunArr (ak, bk) f) address b
-  | kindOf address /= ak
-  = error $ "Data.SBV.writeSFunArr: Impossible happened, accesing with address type: " ++ show (kindOf address) ++ ", expected: " ++ show ak
-  | kindOf b /= bk
-  = error $ "Data.SBV.writeSFunArr: Impossible happened, accesing with address type: " ++ show (kindOf b) ++ ", expected: " ++ show bk
-  | True
-  = SFunArr (ak, bk) $ cache g
-  where g st = do fArrayIndex <- uncacheFAI f st
-                  fArrMap     <- R.readIORef (rFArrayMap st)
-                  constMap    <- R.readIORef (rconstMap st)
-
-                  let consts = Map.fromList [(i, cv) | (cv, SV _ (NodeId i)) <- Map.toList constMap]
-
-                  case unFArrayIndex fArrayIndex `IMap.lookup` fArrMap of
-                    Nothing          -> error $ "Data.SBV.writeSFunArr: Impossible happened while trying to access SFunArray, can't find index: " ++ show fArrayIndex
-
-                    Just (aUi, rCache) -> do
-                       memoTable <- R.readIORef rCache
-                       SV _ (NodeId addressNodeId) <- svToSV st address
-                       val                         <- svToSV st b
-
-                       -- There are two cases:
-                       --
-                       --    (1) We hit the cache, and old value is the same as new: No write necessary, just return the array
-                       --    (2) We hit the cache, values are different OR we miss the cache. We need to insert this value into
-                       --        the cache, overriding the original if it was there. Note that we also have to walk the cache
-                       --        to update each element, as this write can symbolically be the same as some other addresses.
-                       --
-                       -- Below, we determine which case we're in and then insert the value at the end and continue
-                       cont <- case addressNodeId `IMap.lookup` memoTable of
-                                 Just oldVal                    -- Cache hit
-                                   | val == oldVal -> return $ Left fArrayIndex   -- Case 1
-
-                                 _                 -> do        -- Cache miss, or value is different.
-
-                                        let aInfo = (address, addressNodeId `Map.lookup` consts)
-
-                                            -- NB. The order of modifications here is important as we
-                                            -- keep the keys in ascending order. (Since we'll call fromAscList later on.)
-                                            walk :: [(Int, SV)] -> [(Int, SV)] -> IO [(Int, SV)]
-                                            walk []           sofar = return $ reverse sofar
-                                            walk ((i, s):iss) sofar = modify i s >>= \s' -> walk iss ((i, s') : sofar)
-
-                                            -- At the cached address i, currently storing value s. Conditionally update it to `b` (new value)
-                                            -- if the addresses match. Otherwise keep it the same.
-                                            modify :: Int -> SV -> IO SV
-                                            modify i s = svToSV st $ svIte (svEqualWithConsts (nodeIdToSVal ak i, i `Map.lookup` consts) aInfo) b (swToSVal s)
-
-                                        Right . IMap.fromAscList <$> walk (IMap.toAscList (IMap.delete addressNodeId memoTable)) []
-
-                       case cont of
-                         Left j   -> return j  -- There was a hit, and value was unchanged, nothing to do
-
-                         Right mt -> do        -- There was a hit, and the value was different; or there was a miss. Insert the new value
-                                               -- and create a new array. Note that we keep the aUi the same: Just because we modified
-                                               -- an array, it doesn't mean we change the uninitialized reads: they still come from the same place.
-                                               --
-                                        newMemoTable <- R.newIORef $ IMap.insert addressNodeId val mt
-
-                                        let j = FArrayIndex $ IMap.size fArrMap
-                                            upd = IMap.insert (unFArrayIndex j) (aUi, newMemoTable)
-
-                                        j `seq` modifyState st rFArrayMap upd (return ())
-                                        return j
-
--- | Merge two given arrays on the symbolic condition
--- Intuitively: @mergeArrays cond a b = if cond then a else b@.
--- Merging pushes the if-then-else choice down on to elements
-mergeSFunArr :: SVal -> SFunArr -> SFunArr -> SFunArr
-mergeSFunArr t array1@(SFunArr ainfo@(sourceKind, targetKind) a) array2@(SFunArr binfo b)
-  | ainfo /= binfo
-  = error $ "Data.SBV.mergeSFunArr: Impossible happened, merging incompatbile arrays: " ++ show (ainfo, binfo)
-  | Just test <- svAsBool t
-  = if test then array1 else array2
-  | True
-  = SFunArr ainfo $ cache c
-  where c st = do ai <- uncacheFAI a st
-                  bi <- uncacheFAI b st
-
-                  constMap <- R.readIORef (rconstMap st)
-                  let consts = Map.fromList [(i, cv) | (cv, SV _ (NodeId i)) <- Map.toList constMap]
-
-                  -- Catch the degenerate case of merging an array with itself. One
-                  -- can argue this is pointless, but actually it comes up when one
-                  -- is merging composite structures (through a Mergeable class instance)
-                  -- that has an array component that didn't change. So, pays off in practice!
-                  if unFArrayIndex ai == unFArrayIndex bi
-                     then return ai  -- merging with itself, noop
-                     else do fArrMap <- R.readIORef (rFArrayMap st)
-
-                             case (unFArrayIndex ai `IMap.lookup` fArrMap, unFArrayIndex bi `IMap.lookup` fArrMap) of
-                               (Nothing, _) -> error $ "Data.SBV.mergeSFunArr: Impossible happened while trying to access SFunArray, can't find index: " ++ show ai
-                               (_, Nothing) -> error $ "Data.SBV.mergeSFunArr: Impossible happened while trying to access SFunArray, can't find index: " ++ show bi
-                               (Just (aUi, raCache), Just (bUi, rbCache)) -> do
-
-                                   -- This is where the complication happens. We need to merge the caches. If the same
-                                   -- key appears in both, then that's the easy case: Just merge the entries. But if
-                                   -- a key only appears in one but not the other? Just like in the read/write cases,
-                                   -- we have to consider the possibility that the missing key can be any one of the
-                                   -- other elements in the cache. So, for each non-matching key in either memo-table,
-                                   -- we traverse the other and create a chain of look-up values.
-                                   aMemo <- R.readIORef raCache
-                                   bMemo <- R.readIORef rbCache
-
-                                   let aMemoT = IMap.toAscList aMemo
-                                       bMemoT = IMap.toAscList bMemo
-
-                                       -- gen takes a uninitialized-read creator, a key, and the choices from the "other"
-                                       -- cache that this key may map to. And creates a new SV that corresponds to the
-                                       -- merged value:
-                                       gen :: (SVal -> SVal) -> Int -> [(Int, SV)] -> IO SV
-                                       gen mk k choices = svToSV st $ walk choices
-                                         where kInfo = (nodeIdToSVal sourceKind k, k `Map.lookup` consts)
-
-                                               walk :: [(Int, SV)] -> SVal
-                                               walk []             = mk (fst kInfo)
-                                               walk ((i, v) : ivs) = svIte (svEqualWithConsts (nodeIdToSVal sourceKind i, i `Map.lookup` consts) kInfo)
-                                                                           (swToSVal v)
-                                                                           (walk ivs)
-
-                                       -- Insert into an existing map the new key value by merging according to the test
-                                       fill :: Int -> SV -> SV -> IMap.IntMap SV -> IO (IMap.IntMap SV)
-                                       fill k (SV _ (NodeId ni1)) (SV _ (NodeId ni2)) m = do v <- svToSV st (svIte t sval1 sval2)
-                                                                                             return $ IMap.insert k v m
-                                         where sval1 = nodeIdToSVal targetKind ni1
-                                               sval2 = nodeIdToSVal targetKind ni2
-
-                                       -- Walk down the memo-tables in tandem. If we find a common key: Simply fill it in. If we find
-                                       -- a key only in one, generate the corresponding read from the other cache, and do the fill.
-                                       merge []                  []                  sofar = return sofar
-                                       merge ((k1, v1) : as)     []                  sofar = gen bUi k1 bMemoT >>= \v2  -> fill k1 v1  v2 sofar  >>= merge as []
-                                       merge []                  ((k2, v2) : bs)     sofar = gen aUi k2 aMemoT >>= \v1  -> fill k2 v1  v2 sofar  >>= merge [] bs
-                                       merge ass@((k1, v1) : as) bss@((k2, v2) : bs) sofar
-                                         | k1 < k2                                         = gen bUi k1 bMemoT >>= \nv2 -> fill k1 v1  nv2 sofar >>= merge as  bss
-                                         | k1 > k2                                         = gen aUi k2 aMemoT >>= \nv1 -> fill k2 nv1 v2  sofar >>= merge ass bs
-                                         | True                                            =                               fill k1 v1  v2  sofar >>= merge as  bs
-
-                                   mergedMap  <- merge aMemoT bMemoT IMap.empty
-                                   memoMerged <- R.newIORef mergedMap
-
-                                   -- Craft a new uninitializer. Note that we do *not* create a new initializer here,
-                                   -- but simply merge the two initializers which will inherit their original unread
-                                   -- references should the test be a constant.
-                                   let mkUninitialized i = svIte t (aUi i) (bUi i)
-
-                                   -- Add it to our collection:
-                                   let j   = FArrayIndex $ IMap.size fArrMap
-                                       upd = IMap.insert (unFArrayIndex j) (mkUninitialized, memoMerged)
-
-                                   j `seq` modifyState st rFArrayMap upd (return ())
-
-                                   return j
-
--- | Create a named new array
-newSFunArr :: State -> (Kind, Kind) -> (Int -> String) -> Maybe SVal -> IO SFunArr
-newSFunArr st (ak, bk) mkNm mbDef = do
-        fArrMap <- R.readIORef (rFArrayMap st)
-        memoTable <- R.newIORef IMap.empty
-
-        let j  = FArrayIndex $ IMap.size fArrMap
-            nm = mkNm (unFArrayIndex j)
-            mkUninitialized i = case mbDef of
-                                  Just def -> def
-                                  _        -> svUninterpreted bk (nm ++ "_uninitializedRead") Nothing [i]
-
-            upd = IMap.insert (unFArrayIndex j) (mkUninitialized, memoTable)
-
-        registerLabel "SFunArray declaration" st nm
-        j `seq` modifyState st rFArrayMap upd (return ())
-
-        return $ SFunArr (ak, bk) $ cache $ const $ return j
 
 --------------------------------------------------------------------------------
 -- Utility functions
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
@@ -45,7 +45,7 @@
   , svToSV, svToSymSV, forceSVArg
   , SBVExpr(..), newExpr, isCodeGenMode, isSafetyCheckingIStage, isRunIStage, isSetupIStage
   , Cached, cache, uncache, modifyState, modifyIncState
-  , ArrayIndex(..), FArrayIndex(..), uncacheAI, uncacheFAI
+  , ArrayIndex(..), uncacheAI
   , NamedSymVar(..), Name, UserInputs, Inputs(..), getSV, swNodeId, namedNodeId, getUniversals
   , prefixExistentials, prefixUniversals, onUserInputs, onInternInputs, onAllInputs
   , addInternInput, addUserInput, getInputs, inputsFromListWith, userInputsToList
@@ -774,7 +774,7 @@
 -- Show instance for 'Result'. Only for debugging purposes.
 instance Show Result where
   -- If there's nothing interesting going on, just print the constant. Note that the
-  -- definiton of interesting here is rather subjective; but essentially if we reduced
+  -- definition of interesting here is rather subjective; but essentially if we reduced
   -- the result to a single constant already, without any reference to anything.
   show Result{resConsts=(_, cs), resOutputs=[r]}
     | Just c <- r `lookup` cs
@@ -902,7 +902,7 @@
             | ISafe         -- In the context of a safe/safeWith call
             | IRun          -- After the contact is started
 
--- | Are we cecking safety
+-- | Are we checking safety
 isSafetyCheckingIStage :: IStage -> Bool
 isSafetyCheckingIStage s = case s of
                              ISetup -> False
@@ -1129,7 +1129,6 @@
                     , rAsserts     :: IORef [(String, Maybe CallStack, SV)]
                     , rSVCache     :: IORef (Cache SV)
                     , rAICache     :: IORef (Cache ArrayIndex)
-                    , rFAICache    :: IORef (Cache FArrayIndex)
                     , rQueryState  :: IORef (Maybe QueryState)
                     }
 
@@ -1669,7 +1668,6 @@
      axioms    <- newIORef []
      swCache   <- newIORef IMap.empty
      aiCache   <- newIORef IMap.empty
-     faiCache  <- newIORef IMap.empty
      usedKinds <- newIORef Set.empty
      usedLbls  <- newIORef Set.empty
      cstrs     <- newIORef S.empty
@@ -1700,7 +1698,6 @@
                   , raxioms      = axioms
                   , rSVCache     = swCache
                   , rAICache     = aiCache
-                  , rFAICache    = faiCache
                   , rConstraints = cstrs
                   , rSMTOptions  = smtOpts
                   , rOptGoals    = optGoals
@@ -1854,20 +1851,9 @@
 instance Show ArrayIndex where
   show (ArrayIndex i) = show i
 
--- | A functional array index is simply an int value
-newtype FArrayIndex = FArrayIndex { unFArrayIndex :: Int } deriving (Eq, Ord)
-
--- | We simply show indexes as the underlying integer
-instance Show FArrayIndex where
-  show (FArrayIndex i) = show i
-
 -- | Uncache, retrieving SMT array indexes
 uncacheAI :: Cached ArrayIndex -> State -> IO ArrayIndex
 uncacheAI = uncacheGen rAICache
-
--- | Uncache, retrieving Functional array indexes
-uncacheFAI :: Cached FArrayIndex -> State -> IO FArrayIndex
-uncacheFAI = uncacheGen rFAICache
 
 -- | Generic uncaching. Note that this is entirely safe, since we do it in the IO monad.
 uncacheGen :: (State -> IORef (Cache a)) -> Cached a -> State -> IO a
diff --git a/Data/SBV/Dynamic.hs b/Data/SBV/Dynamic.hs
--- a/Data/SBV/Dynamic.hs
+++ b/Data/SBV/Dynamic.hs
@@ -23,9 +23,6 @@
   , HasKind(..), Kind(..), CV(..), CVal(..), cvToBool
   -- *** SMT Arrays of symbolic values
   , SArr, readSArr, writeSArr, mergeSArr, newSArr, eqSArr
-  -- *** Functional arrays of symbolic values
-  , SFunArr, readSFunArr, writeSFunArr, mergeSFunArr, newSFunArr
-
   -- ** Creating a symbolic variable
   , Symbolic
   , Quantifier(..)
diff --git a/Data/SBV/Provers/Boolector.hs b/Data/SBV/Provers/Boolector.hs
--- a/Data/SBV/Provers/Boolector.hs
+++ b/Data/SBV/Provers/Boolector.hs
@@ -24,7 +24,7 @@
            name         = Boolector
          , executable   = "boolector"
          , preprocess   = id
-         , options      = const ["--smt2", "--smt2-model", "--no-exit-codes", "--incremental"]
+         , options      = const ["--smt2", "-m", "--output-format=smt2", "--no-exit-codes", "--incremental"]
          , engine       = standardEngine "SBV_BOOLECTOR" "SBV_BOOLECTOR_OPTIONS"
          , capabilities = SolverCapabilities {
                                 supportsQuantifiers        = False
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
@@ -674,20 +674,11 @@
   forSome (s:ss) k = exists s >>= \a -> forSome ss $ k a
   forSome []     k = forSome_ k
 
--- SFunArrays (memory, functional representation), only supported universally for the time being
+-- Arrays
 instance (HasKind a, HasKind b, MProvable m p) => MProvable m (SArray a b -> p) where
   forAll_        k = newArray_  Nothing >>= \a -> forAll_   $ k a
   forAll  (s:ss) k = newArray s Nothing >>= \a -> forAll ss $ k a
   forAll  []     k = forAll_ k
-  forSome_       k = newArray_  Nothing >>= \a -> forSome_   $ k a
-  forSome (s:ss) k = newArray s Nothing >>= \a -> forSome ss $ k a
-  forSome []     k = forSome_ k
-
--- SArrays (memory, SMT-Lib notion of arrays), only supported universally for the time being
-instance (HasKind a, HasKind b, MProvable m p) => MProvable m (SFunArray a b -> p) where
-  forAll_        k = newArray_  Nothing >>= \a -> forAll_   $ k a
-  forAll (s:ss)  k = newArray s Nothing >>= \a -> forAll ss $ k a
-  forAll []      k = forAll_ k
   forSome_       k = newArray_  Nothing >>= \a -> forSome_   $ k a
   forSome (s:ss) k = newArray s Nothing >>= \a -> forSome ss $ k a
   forSome []     k = forSome_ k
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
@@ -175,7 +175,7 @@
                        (False, False) -> ""
                        (False, True)  -> " (Search stopped since solver has returned unknown.)"
                        (True,  False) -> " (Unique up to prefix existentials.)"
-                       (True,  True)  -> " (Search stopped becase solver has returned unknown, only prefix existentials were considered.)"
+                       (True,  True)  -> " (Search stopped because solver has returned unknown, only prefix existentials were considered.)"
 
           go c (s:ss) = let c'      = c+1
                             (ok, o) = sh c' s
@@ -661,7 +661,7 @@
 
 -- | A standard solver interface. If the solver is SMT-Lib compliant, then this function should suffice in
 -- communicating with it.
-standardSolver :: SMTConfig       -- ^ The currrent configuration
+standardSolver :: SMTConfig       -- ^ The current configuration
                -> State           -- ^ Context in which we are running
                -> String          -- ^ The program
                -> (State -> IO a) -- ^ The continuation
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
@@ -199,27 +199,28 @@
              ++ concatMap declUI uis
              ++ [ "; --- user given axioms ---" ]
              ++ map declAx axs
-             ++ [ "; --- formula ---" ]
-
+             ++ [ "; --- preQuantifier assignments ---" ]
              ++ concatMap (declDef cfg skolemMap tableMap) preQuantifierAssigns
+             ++ [ "; --- arrayDelayeds ---" ]
+             ++ concat arrayDelayeds
+             ++ [ "; --- arraySetups ---" ]
+             ++ concat arraySetups
+             ++ [ "; --- formula ---" ]
              ++ ["(assert (forall (" ++ intercalate "\n                 "
                                         ["(" ++ show s ++ " " ++ svType s ++ ")" | s <- foralls] ++ ")"
                 | not (null foralls)
                 ]
+             ++ [ "; --- postQuantifier assignments ---" ]
              ++ concatMap mkAssign postQuantifierAssigns
-
-             ++ concat arrayDelayeds
-
-             ++ concat arraySetups
-
+             ++ [ "; --- delayedEqualities ---" ]
              ++ delayedAsserts delayedEqualities
-
+             ++ [ "; -- finalAssert ---" ]
              ++ finalAssert
 
         -- identify the assignments that can come before the first quantifier
         (preQuantifierAssigns, postQuantifierAssigns)
            | null foralls
-           = ([], asgns)  -- the apparent "switch" here is OK; rest of the code works correctly if there are no foralls.
+           = (asgns, [])
            | True
            = span pre asgns
            where first      = nodeId (minimum foralls)
@@ -568,7 +569,7 @@
         lis  = length is
 
         setup
-          | lis == 0       = [ "(define-fun " ++ initializer ++ " () Bool true) ; no initializiation needed"
+          | lis == 0       = [ "(define-fun " ++ initializer ++ " () Bool true) ; no initialization needed"
                              ]
           | lis == 1       = [ "(define-fun " ++ initializer ++ " () Bool " ++ mkInit 0 ++ ")"
                              , "(assert " ++ initializer ++ ")"
@@ -653,7 +654,7 @@
         lAll          = lpre + length post
 
         setup
-          | lAll == 0      = [ "(define-fun " ++ initializer ++ " () Bool true) ; no initializiation needed" | not quantified]
+          | lAll == 0      = [ "(define-fun " ++ initializer ++ " () Bool true) ; no initialization needed" | not quantified]
           | lAll == 1      = [ "(define-fun " ++ initializer ++ " () Bool " ++ mkInit 0 ++ ")"
                              , "(assert " ++ initializer ++ ")"
                              ]
diff --git a/Data/SBV/Tools/Range.hs b/Data/SBV/Tools/Range.hs
--- a/Data/SBV/Tools/Range.hs
+++ b/Data/SBV/Tools/Range.hs
@@ -61,8 +61,16 @@
 -- | Given a single predicate over a single variable, find the contiguous ranges over which the predicate
 -- is satisfied. SBV will make one call to the optimizer, and then as many calls to the solver as there are
 -- disjoint ranges that the predicate is satisfied over. (Linear in the number of ranges.) Note that the
--- number of ranges is large, this can take a long time! Some examples:
+-- number of ranges is large, this can take a long time!
 --
+-- Beware that, as of June 2021, z3 no longer supports optimization with 'SReal' in the presence of
+-- strict inequalities. See <https://github.com/Z3Prover/z3/issues/5314> for details. So, if you
+-- have 'SReal' variables, it is important that you do /not/ use a strict inequality, i.e., '.>', '.<' etc.
+-- Inequalities of the form '.<=', '.>=', and './=' should be OK. Please report if you see any fishy
+-- behavior due to this change in z3's behavior.
+--
+-- Some examples:
+--
 -- >>> ranges (\(_ :: SInteger) -> sFalse)
 -- []
 -- >>> ranges (\(_ :: SInteger) -> sTrue)
@@ -73,20 +81,18 @@
 -- [[5,6),(6,67),(67,75]]
 -- >>> ranges (\(x :: SInteger) -> sAnd [x .<= 75, x ./= 3, x ./= 67])
 -- [(-oo,3),(3,67),(67,75]]
--- >>> ranges (\(x :: SReal) -> sAnd [x .> 3.2, x .<  12.7])
--- [(3.2,12.7)]
--- >>> ranges (\(x :: SReal) -> sAnd [x .> 3.2, x .<= 12.7])
--- [(3.2,12.7]]
+-- >>> ranges (\(x :: SReal) -> sAnd [x .>= 3.2, x .<= 12.7])
+-- [[3.2,12.7]]
 -- >>> ranges (\(x :: SReal) -> sAnd [x .<= 12.7, x ./= 8])
 -- [(-oo,8.0),(8.0,12.7]]
 -- >>> ranges (\(x :: SReal) -> sAnd [x .>= 12.7, x ./= 15])
 -- [[12.7,15.0),(15.0,oo)]
 -- >>> ranges (\(x :: SInt8) -> sAnd [x .<= 7, x ./= 6])
 -- [[-128,6),(6,7]]
--- >>> ranges $ \x -> x .> (0::SReal)
--- [(0.0,oo)]
--- >>> ranges $ \x -> x .< (0::SReal)
--- [(-oo,0.0)]
+-- >>> ranges $ \x -> x .>= (0::SReal)
+-- [[0.0,oo)]
+-- >>> ranges $ \x -> x .<= (0::SReal)
+-- [(-oo,0.0]]
 -- >>> ranges $ \(x :: SWord8) -> 2*x .== 4
 -- [[2,3),(129,130]]
 ranges :: forall a. (Ord a, Num a, SymVal a,  SatModel a, Metric a, SymVal (MetricSpace a), SatModel (MetricSpace a)) => (SBV a -> SBool) -> IO [Range a]
diff --git a/Data/SBV/Trans.hs b/Data/SBV/Trans.hs
--- a/Data/SBV/Trans.hs
+++ b/Data/SBV/Trans.hs
@@ -39,7 +39,7 @@
   -- ** Symbolic lists
   , SList
   -- * Arrays of symbolic values
-  , SymArray(newArray_, newArray, readArray, writeArray, mergeArrays), SArray, SFunArray
+  , SymArray(newArray_, newArray, readArray, writeArray, mergeArrays), SArray
 
   -- * Creating symbolic values
   -- ** Single value
diff --git a/Data/SBV/Tuple.hs b/Data/SBV/Tuple.hs
--- a/Data/SBV/Tuple.hs
+++ b/Data/SBV/Tuple.hs
@@ -143,7 +143,7 @@
 _2 :: HasField "_2" b a => SBV a -> SBV b
 _2 = field (Get @"_2")
 
--- | Access the 3nd element of an @STupleN@, @3 <= N <= 8@. Also see '^.'.
+-- | Access the 3rd element of an @STupleN@, @3 <= N <= 8@. Also see '^.'.
 _3 :: HasField "_3" b a => SBV a -> SBV b
 _3 = field (Get @"_3")
 
diff --git a/Data/SBV/Utils/PrettyNum.hs b/Data/SBV/Utils/PrettyNum.hs
--- a/Data/SBV/Utils/PrettyNum.hs
+++ b/Data/SBV/Utils/PrettyNum.hs
@@ -239,7 +239,7 @@
   bin  s = maybe (show s) (bin  :: a -> String) $ unliteral s
 
 -- | Show as a hexadecimal value. First bool controls whether type info is printed
--- while the second boolean controls wether 0x prefix is printed. The tuple is
+-- while the second boolean controls whether 0x prefix is printed. The tuple is
 -- the signedness and the bit-length of the input. The length of the string
 -- will /not/ depend on the value, but rather the bit-length.
 shex :: (Show a, Integral a) => Bool -> Bool -> (Bool, Int) -> a -> String
diff --git a/Documentation/SBV/Examples/Crypto/AES.hs b/Documentation/SBV/Examples/Crypto/AES.hs
--- a/Documentation/SBV/Examples/Crypto/AES.hs
+++ b/Documentation/SBV/Examples/Crypto/AES.hs
@@ -428,7 +428,7 @@
 {- $verifIntro
   While SMT based technologies can prove correct many small properties fairly quickly, it would
   be naive for them to automatically verify that our AES implementation is correct. (By correct,
-  we mean decryption follewed by encryption yielding the same result.) However, we can state
+  we mean decryption followed by encryption yielding the same result.) However, we can state
   this property precisely using SBV, and use quick-check to gain some confidence.
 -}
 
diff --git a/Documentation/SBV/Examples/Existentials/Diophantine.hs b/Documentation/SBV/Examples/Existentials/Diophantine.hs
--- a/Documentation/SBV/Examples/Existentials/Diophantine.hs
+++ b/Documentation/SBV/Examples/Existentials/Diophantine.hs
@@ -74,15 +74,15 @@
 -- We have:
 --
 -- >>> test
--- NonHomogeneous [[1,0,0],[0,2,0]] [[1,0,2],[0,1,1]]
+-- NonHomogeneous [[0,2,0],[1,0,0]] [[1,0,2],[0,1,1]]
 --
 -- which means that the solutions are of the form:
 --
---    @(1, 0, 0) + k (1, 0, 2) + k' (0, 1, 1) = (1+k, k', 2k+k')@
+--    @(0, 2, 0) + k (1, 0, 2) + k' (0, 1, 1) = (k, 2+k', 2k+k')@
 --
 -- OR
 --
---    @(0, 2, 0) + k (1, 0, 2) + k' (0, 1, 1) = (k, 2+k', 2k+k')@
+--    @(1, 0, 0) + k (1, 0, 2) + k' (0, 1, 1) = (1+k, k', 2k+k')@
 --
 -- for arbitrary @k@, @k'@. It's easy to see that these are really solutions
 -- to the equation given. It's harder to see that they cover all possibilities,
diff --git a/Documentation/SBV/Examples/Misc/Floating.hs b/Documentation/SBV/Examples/Misc/Floating.hs
--- a/Documentation/SBV/Examples/Misc/Floating.hs
+++ b/Documentation/SBV/Examples/Misc/Floating.hs
@@ -62,19 +62,19 @@
 --
 -- >>> assocPlusRegular
 -- Falsifiable. Counter-example:
---   x =  1.3067223e-25 :: Float
---   y = -1.7763568e-15 :: Float
---   z =  1.7762754e-15 :: Float
+--   x = -1.860921e38 :: Float
+--   y = 2.1240016e32 :: Float
+--   z = 2.2772656e33 :: Float
 --
 -- Indeed, we have:
 --
--- >>> let x =  1.3067223e-25 :: Float
--- >>> let y = -1.7763568e-15 :: Float
--- >>> let z =  1.7762754e-15 :: Float
+-- >>> let x = -1.860921e38 :: Float
+-- >>> let y = 2.1240016e32 :: Float
+-- >>> let z = 2.2772656e33 :: Float
 -- >>> x + (y + z)
--- -8.142091e-20
+-- -1.860896e38
 -- >>> (x + y) + z
--- -8.142104e-20
+-- -1.8608963e38
 --
 -- Note the difference in the results!
 assocPlusRegular :: IO ThmResult
@@ -96,13 +96,13 @@
 --
 -- >>> nonZeroAddition
 -- Falsifiable. Counter-example:
---   a = 7.486071e12 :: Float
---   b =    188.8646 :: Float
+--   a =  3.2446953e28 :: Float
+--   b = -4.486113e-39 :: Float
 --
 -- Indeed, we have:
 --
--- >>> let a = 7.486071e12 :: Float
--- >>> let b =    188.8646 :: Float
+-- >>> let a =  3.2446953e28 :: Float
+-- >>> let b = -4.486113e-39 :: Float
 -- >>> a + b == a
 -- True
 -- >>> b == 0
@@ -125,11 +125,11 @@
 --
 -- >>> multInverse
 -- Falsifiable. Counter-example:
---   a = 8.590978e-39 :: Float
+--   a = 2.944504e-39 :: Float
 --
 -- Indeed, we have:
 --
--- >>> let a = 8.590978e-39 :: Float
+-- >>> let a = 2.944504e-39 :: Float
 -- >>> a * (1/a)
 -- 0.99999994
 multInverse :: IO ThmResult
@@ -152,24 +152,24 @@
 -- >>> roundingAdd
 -- Satisfiable. Model:
 --   rm = RoundTowardPositive :: RoundingMode
---   x  =       -2.240786e-38 :: Float
---   y  =        -1.10355e-39 :: Float
+--   x  =       3.6969435e-35 :: Float
+--   y  =      -1.1628614e-38 :: Float
 --
 -- (Note that depending on your version of Z3, you might get a different result.)
 -- Unfortunately Haskell floats do not allow computation with arbitrary rounding modes, but SBV's
 -- 'SFloatingPoint' type does. We have:
 --
--- >>> fpAdd sRoundNearestTiesToEven (-2.240786e-38) (-1.10355e-39) :: SFPSingle
--- -2.35114116e-38 :: SFloatingPoint 8 24
--- >>> fpAdd sRoundTowardPositive    (-2.240786e-38) (-1.10355e-39) :: SFPSingle
--- -2.35114088e-38 :: SFloatingPoint 8 24
+-- >>> fpAdd sRoundNearestTiesToEven 3.6969435e-35 (-1.1628614e-38) :: SFPSingle
+-- 3.69578064e-35 :: SFloatingPoint 8 24
+-- >>> fpAdd sRoundTowardPositive    3.6969435e-35 (-1.1628614e-38) :: SFPSingle
+-- 3.69578093e-35 :: SFloatingPoint 8 24
 --
 -- We can see why these two results are indeed different: The 'RoundTowardPositive'
 -- (which rounds towards positive infinity from zero) produces a larger result. Indeed, if we treat these numbers
 -- as 'Double' values, we get:
 --
--- >>> -2.240786e-38 + (-1.10355e-39) :: Double
--- -2.351141e-38
+-- >>> 3.6969435e-35 + (-1.1628614e-38) :: Double
+-- 3.6957806386e-35
 --
 -- we see that the "more precise" result is larger than what the 'Float' value is, justifying the
 -- larger value with 'RoundTowardPositive'. A more detailed study is beyond our current scope, so we'll
diff --git a/Documentation/SBV/Examples/Optimization/ExtField.hs b/Documentation/SBV/Examples/Optimization/ExtField.hs
--- a/Documentation/SBV/Examples/Optimization/ExtField.hs
+++ b/Documentation/SBV/Examples/Optimization/ExtField.hs
@@ -23,17 +23,17 @@
 --
 -- >>> optimize Independent problem
 -- Objective "one-x": Optimal in an extension field:
---   one-x =                    oo :: Integer
---   min_y = 7.0 + (3.0 * epsilon) :: Real
---   min_z = 5.0 + (2.0 * epsilon) :: Real
+--   one-x =  oo :: Integer
+--   min_y = 7.0 :: Real
+--   min_z = 5.0 :: Real
 -- Objective "min_y": Optimal in an extension field:
---   one-x =                    oo :: Integer
---   min_y = 7.0 + (3.0 * epsilon) :: Real
---   min_z = 5.0 + (2.0 * epsilon) :: Real
+--   one-x =  oo :: Integer
+--   min_y = 7.0 :: Real
+--   min_z = 5.0 :: Real
 -- Objective "min_z": Optimal in an extension field:
---   one-x =                    oo :: Integer
---   min_y = 7.0 + (3.0 * epsilon) :: Real
---   min_z = 5.0 + (2.0 * epsilon) :: Real
+--   one-x =  oo :: Integer
+--   min_y = 7.0 :: Real
+--   min_z = 5.0 :: Real
 problem :: Goal
 problem = do x <- sInteger "x"
              y <- sReal "y"
@@ -41,7 +41,7 @@
 
              maximize "one-x" $ 1 - x
 
-             constrain $ y .> 0 .&& z .> 5
+             constrain $ y .>= 0 .&& z .>= 5
              minimize "min_y" $ 2+y+z
 
              minimize "min_z" z
diff --git a/Documentation/SBV/Examples/ProofTools/BMC.hs b/Documentation/SBV/Examples/ProofTools/BMC.hs
--- a/Documentation/SBV/Examples/ProofTools/BMC.hs
+++ b/Documentation/SBV/Examples/ProofTools/BMC.hs
@@ -83,7 +83,7 @@
 -- BMC: Iteration: 2
 -- BMC: Iteration: 3
 -- BMC: Solution found at iteration 3
--- Right (3,[(0,10),(0,6),(2,6),(2,2)])
+-- Right (3,[(0,10),(0,6),(0,2),(2,2)])
 --
 -- As expected, there's a solution in this case. Furthermore, since the BMC engine
 -- found a solution at depth @3@, we also know that there is no solution at
diff --git a/Documentation/SBV/Examples/Puzzles/HexPuzzle.hs b/Documentation/SBV/Examples/Puzzles/HexPuzzle.hs
--- a/Documentation/SBV/Examples/Puzzles/HexPuzzle.hs
+++ b/Documentation/SBV/Examples/Puzzles/HexPuzzle.hs
@@ -65,7 +65,7 @@
 type SButton = SBV Button
 
 -- | The grid is an array mapping each button to its color.
-type Grid = SFunArray Button Color
+type Grid = SArray Button Color
 
 -- | Given a button press, and the current grid, compute the next grid.
 -- If the button is "unpressable", i.e., if it is not one of the center
diff --git a/Documentation/SBV/Examples/Queries/FourFours.hs b/Documentation/SBV/Examples/Queries/FourFours.hs
--- a/Documentation/SBV/Examples/Queries/FourFours.hs
+++ b/Documentation/SBV/Examples/Queries/FourFours.hs
@@ -132,7 +132,7 @@
                                 , (Factorial, 24)  -- argument is restricted to 4, so the value is 24
                                 ]
 
--- | In the query mode, find a filling of a given tree shape /t/, such that it evalutes to the
+-- | In the query mode, find a filling of a given tree shape /t/, such that it evaluates to the
 -- requested number /i/. Note that we return back a concrete tree.
 generate :: Integer -> T () () -> IO (Maybe (T BinOp UnOp))
 generate i t = runSMT $ do symT <- fill t
diff --git a/Documentation/SBV/Examples/Strings/SQLInjection.hs b/Documentation/SBV/Examples/Strings/SQLInjection.hs
--- a/Documentation/SBV/Examples/Strings/SQLInjection.hs
+++ b/Documentation/SBV/Examples/Strings/SQLInjection.hs
@@ -41,7 +41,7 @@
 
 -- | Evaluation monad. The state argument is the environment to store
 -- variables as we evaluate.
-type M = StateT (SFunArray String String) (WriterT [SString] Symbolic)
+type M = StateT (SArray String String) (WriterT [SString] Symbolic)
 
 -- | Given an expression, symbolically evaluate it
 eval :: SQLExpr -> M SString
@@ -69,7 +69,7 @@
 nameRe :: R.RegExp
 nameRe = R.Loop 1 7 (R.Range 'a' 'z')
 
--- | Strings: Again, at most of lenght 5, surrounded by quotes.
+-- | Strings: Again, at most of length 5, surrounded by quotes.
 strRe :: R.RegExp
 strRe = "'" * R.Loop 1 5 (R.Range 'a' 'z' + " ") * "'"
 
@@ -137,7 +137,7 @@
 
     -- Create an initial environment that returns the symbolic
     -- value my_topicid only, and unspecified for all other variables
-    emptyEnv :: SFunArray String String <- newArray "emptyEnv" Nothing
+    emptyEnv :: SArray String String <- newArray "emptyEnv" Nothing
 
     let env = writeArray emptyEnv "my_topicid" badTopic
 
diff --git a/Documentation/SBV/Examples/Uninterpreted/AUF.hs b/Documentation/SBV/Examples/Uninterpreted/AUF.hs
--- a/Documentation/SBV/Examples/Uninterpreted/AUF.hs
+++ b/Documentation/SBV/Examples/Uninterpreted/AUF.hs
@@ -62,14 +62,3 @@
                 y <- free "y"
                 a :: SArray Word32 Word32 <- newArray_ Nothing
                 return $ thm x y a
-
--- | Prove it using SBV's internal functional arrays.
---
--- >>> proveSFunArray
--- Q.E.D.
-proveSFunArray :: IO ThmResult
-proveSFunArray = prove $ do
-                x <- free "x"
-                y <- free "y"
-                a :: SFunArray Word32 Word32 <- newArray_ Nothing
-                return $ thm x y a
diff --git a/SBVBenchSuite/BenchSuite/Bench/Bench.hs b/SBVBenchSuite/BenchSuite/Bench/Bench.hs
--- a/SBVBenchSuite/BenchSuite/Bench/Bench.hs
+++ b/SBVBenchSuite/BenchSuite/Bench/Bench.hs
@@ -75,7 +75,7 @@
                        , problem     :: Problem
                        }
 
--- | GADT to allow arbritrary nesting of runners. This copies criterion's design
+-- | GADT to allow arbitrary nesting of runners. This copies criterion's design
 -- so that we don't have to separate out runners that run a single benchmark
 -- from runners that need to run several benchmarks
 data Runner where
diff --git a/SBVBenchSuite/BenchSuite/Uninterpreted/AUF.hs b/SBVBenchSuite/BenchSuite/Uninterpreted/AUF.hs
--- a/SBVBenchSuite/BenchSuite/Uninterpreted/AUF.hs
+++ b/SBVBenchSuite/BenchSuite/Uninterpreted/AUF.hs
@@ -23,13 +23,8 @@
 benchmarks :: Runner
 benchmarks = rGroup
   [ run "SArray" array `using` runner proveWith
-  , run "SFunArray" funArray `using` runner proveWith
   ]
   where array = do x <- free "x"
                    y <- free "y"
                    a :: SArray Word32 Word32 <- newArray_ Nothing
                    return $ thm x y a
-        funArray = do x <- free "x"
-                      y <- free "y"
-                      a :: SFunArray Word32 Word32 <- newArray_ Nothing
-                      return $ thm x y a
diff --git a/SBVTestSuite/GoldFiles/allSat6.gold b/SBVTestSuite/GoldFiles/allSat6.gold
--- a/SBVTestSuite/GoldFiles/allSat6.gold
+++ b/SBVTestSuite/GoldFiles/allSat6.gold
@@ -1,8 +1,8 @@
 Solution #1:
-  x = 0 :: Word8
+  x = 1 :: Word8
   y = 2 :: Word8
 Solution #2:
-  x = 1 :: Word8
+  x = 0 :: Word8
   y = 2 :: Word8
 Solution #3:
   x = 0 :: Word8
diff --git a/SBVTestSuite/GoldFiles/allSat7.gold b/SBVTestSuite/GoldFiles/allSat7.gold
--- a/SBVTestSuite/GoldFiles/allSat7.gold
+++ b/SBVTestSuite/GoldFiles/allSat7.gold
@@ -21,7 +21,7 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s4 () Bool (>= s0 s3))
 [GOOD] (define-fun s6 () Bool (<= s0 s5))
 [GOOD] (define-fun s7 () Bool (and s4 s6))
@@ -32,6 +32,12 @@
 [GOOD] (define-fun s12 () Bool (<= s2 s5))
 [GOOD] (define-fun s13 () Bool (and s11 s12))
 [GOOD] (define-fun s14 () Bool (distinct s0 s1 s2))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s7)
 [GOOD] (assert s10)
 [GOOD] (assert s13)
diff --git a/SBVTestSuite/GoldFiles/array_caching_01.gold b/SBVTestSuite/GoldFiles/array_caching_01.gold
--- a/SBVTestSuite/GoldFiles/array_caching_01.gold
+++ b/SBVTestSuite/GoldFiles/array_caching_01.gold
@@ -10,29 +10,49 @@
 [GOOD] ; --- tuples ---
 [GOOD] ; --- sums ---
 [GOOD] ; --- literal constants ---
-[GOOD] (define-fun s1 () Int 0)
+[GOOD] (define-fun s0 () Int 0)
 [GOOD] (define-fun s3 () Int 2)
 [GOOD] (define-fun s4 () Int 1)
 [GOOD] ; --- skolem constants ---
-[GOOD] (declare-fun s0 () Int) ; tracks user variable "x"
+[GOOD] (declare-fun s1 () Int) ; tracks user variable "x"
 [GOOD] ; --- constant tables ---
 [GOOD] ; --- skolemized tables ---
 [GOOD] ; --- arrays ---
+[GOOD] (define-fun array_0 () (Array Int Int) ((as const (Array Int Int)) 0))
+[GOOD] (declare-fun array_1 () (Array Int Int))
+[GOOD] (define-fun array_1_initializer_0 () Bool (= array_1 (store array_0 s0 s3)))
+[GOOD] (declare-fun array_2 () (Array Int Int))
+[GOOD] (declare-fun array_3 () (Array Int Int))
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s2 () Bool (= s0 s1))
-[GOOD] (define-fun s5 () Int (+ s0 s4))
-[GOOD] (define-fun s6 () Bool (= s1 s5))
-[GOOD] (define-fun s7 () Int (ite s6 s3 s1))
-[GOOD] (define-fun s8 () Int (ite s6 s4 s3))
+[GOOD] (define-fun s5 () Int (+ s1 s4))
+[GOOD] (define-fun s6 () Int (select array_1 s5))
+[GOOD] (define-fun s7 () Int (select array_2 s0))
+[GOOD] (define-fun s8 () Int (select array_3 s0))
 [GOOD] (define-fun s9 () Int (ite s2 s7 s8))
 [GOOD] (define-fun s10 () Bool (= s4 s9))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] (define-fun array_2_initializer_0 () Bool (= array_2 (store array_1 s0 s6)))
+[GOOD] (define-fun array_3_initializer_0 () Bool (= array_3 (store array_1 s5 s4)))
+[GOOD] ; --- arraySetups ---
+[GOOD] (define-fun array_0_initializer () Bool true) ; no initialization needed
+[GOOD] (define-fun array_1_initializer () Bool array_1_initializer_0)
+[GOOD] (assert array_1_initializer)
+[GOOD] (define-fun array_2_initializer () Bool array_2_initializer_0)
+[GOOD] (assert array_2_initializer)
+[GOOD] (define-fun array_3_initializer () Bool array_3_initializer_0)
+[GOOD] (assert array_3_initializer)
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s10)
 [SEND] (check-sat)
 [RECV] sat
-[SEND] (get-value (s0))
-[RECV] ((s0 (- 1)))
+[SEND] (get-value (s1))
+[RECV] ((s1 (- 1)))
 *** Solver   : Z3
 *** Exit code: ExitSuccess
 
diff --git a/SBVTestSuite/GoldFiles/array_caching_02.gold b/SBVTestSuite/GoldFiles/array_caching_02.gold
--- a/SBVTestSuite/GoldFiles/array_caching_02.gold
+++ b/SBVTestSuite/GoldFiles/array_caching_02.gold
@@ -10,29 +10,49 @@
 [GOOD] ; --- tuples ---
 [GOOD] ; --- sums ---
 [GOOD] ; --- literal constants ---
-[GOOD] (define-fun s1 () Int 0)
+[GOOD] (define-fun s0 () Int 0)
 [GOOD] (define-fun s3 () Int 2)
 [GOOD] (define-fun s4 () Int 1)
 [GOOD] ; --- skolem constants ---
-[GOOD] (declare-fun s0 () Int) ; tracks user variable "x"
+[GOOD] (declare-fun s1 () Int) ; tracks user variable "x"
 [GOOD] ; --- constant tables ---
 [GOOD] ; --- skolemized tables ---
 [GOOD] ; --- arrays ---
+[GOOD] (define-fun array_0 () (Array Int Int) ((as const (Array Int Int)) 0))
+[GOOD] (declare-fun array_1 () (Array Int Int))
+[GOOD] (define-fun array_1_initializer_0 () Bool (= array_1 (store array_0 s0 s3)))
+[GOOD] (declare-fun array_2 () (Array Int Int))
+[GOOD] (declare-fun array_3 () (Array Int Int))
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s2 () Bool (distinct s0 s1))
-[GOOD] (define-fun s5 () Int (+ s0 s4))
-[GOOD] (define-fun s6 () Bool (= s1 s5))
-[GOOD] (define-fun s7 () Int (ite s6 s4 s3))
-[GOOD] (define-fun s8 () Int (ite s6 s3 s1))
-[GOOD] (define-fun s9 () Int (ite s2 s7 s8))
+[GOOD] (define-fun s5 () Int (+ s1 s4))
+[GOOD] (define-fun s6 () Int (select array_2 s0))
+[GOOD] (define-fun s7 () Int (select array_1 s5))
+[GOOD] (define-fun s8 () Int (select array_3 s0))
+[GOOD] (define-fun s9 () Int (ite s2 s6 s8))
 [GOOD] (define-fun s10 () Bool (= s4 s9))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] (define-fun array_2_initializer_0 () Bool (= array_2 (store array_1 s5 s4)))
+[GOOD] (define-fun array_3_initializer_0 () Bool (= array_3 (store array_1 s0 s7)))
+[GOOD] ; --- arraySetups ---
+[GOOD] (define-fun array_0_initializer () Bool true) ; no initialization needed
+[GOOD] (define-fun array_1_initializer () Bool array_1_initializer_0)
+[GOOD] (assert array_1_initializer)
+[GOOD] (define-fun array_2_initializer () Bool array_2_initializer_0)
+[GOOD] (assert array_2_initializer)
+[GOOD] (define-fun array_3_initializer () Bool array_3_initializer_0)
+[GOOD] (assert array_3_initializer)
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s10)
 [SEND] (check-sat)
 [RECV] sat
-[SEND] (get-value (s0))
-[RECV] ((s0 (- 1)))
+[SEND] (get-value (s1))
+[RECV] ((s1 (- 1)))
 *** Solver   : Z3
 *** Exit code: ExitSuccess
 
diff --git a/SBVTestSuite/GoldFiles/auf-0.gold b/SBVTestSuite/GoldFiles/auf-0.gold
deleted file mode 100644
--- a/SBVTestSuite/GoldFiles/auf-0.gold
+++ /dev/null
@@ -1,32 +0,0 @@
-INPUTS
-  s0 :: SWord32, existential, aliasing "x"
-  s1 :: SWord32, existential, aliasing "y"
-CONSTANTS
-  s2 = 2 :: Word32
-  s6 = 3 :: Word32
-  s13 = 1 :: Word32
-TABLES
-ARRAYS
-UNINTERPRETED CONSTANTS
-  [uninterpreted] a_uninitializedRead :: SWord32 -> SWord32
-  [uninterpreted] f :: SWord32 -> SWord64
-USER GIVEN CODE SEGMENTS
-AXIOMS
-DEFINE
-  s3 :: SWord32 = s0 + s2
-  s4 :: SBool = s1 == s3
-  s5 :: SBool = ~ s4
-  s7 :: SWord32 = s1 - s2
-  s8 :: SBool = s0 == s7
-  s9 :: SWord32 = [uninterpreted] a_uninitializedRead s7
-  s10 :: SWord32 = if s8 then s6 else s9
-  s11 :: SWord64 = [uninterpreted] f s10
-  s12 :: SWord32 = s1 - s0
-  s14 :: SWord32 = s12 + s13
-  s15 :: SWord64 = [uninterpreted] f s14
-  s16 :: SBool = s11 == s15
-  s17 :: SBool = s5 | s16
-CONSTRAINTS
-ASSERTIONS
-OUTPUTS
-  s17
diff --git a/SBVTestSuite/GoldFiles/barrelRotate_Left_Int16_Word16.gold b/SBVTestSuite/GoldFiles/barrelRotate_Left_Int16_Word16.gold
--- a/SBVTestSuite/GoldFiles/barrelRotate_Left_Int16_Word16.gold
+++ b/SBVTestSuite/GoldFiles/barrelRotate_Left_Int16_Word16.gold
@@ -21,7 +21,7 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s3 () (_ BitVec 16) (bvurem s1 s2))
 [GOOD] (define-fun s4 () (_ BitVec 1) ((_ extract 3 3) s3))
 [GOOD] (define-fun s6 () Bool (distinct s4 s5))
@@ -55,6 +55,11 @@
 [GOOD] (define-fun s34 () (_ BitVec 16) ((_ rotate_left 15) s0))
 [GOOD] (define-fun s36 () (_ BitVec 16) (ite (bvule #x0010 s3) s35 (table0 s3)))
 [GOOD] (define-fun s37 () Bool (= s20 s36))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
 [GOOD] (assert (= (table0 #x0000) s0))
 [GOOD] (assert (= (table0 #x0001) s13))
 [GOOD] (assert (= (table0 #x0002) s21))
@@ -71,6 +76,7 @@
 [GOOD] (assert (= (table0 #x000d) s32))
 [GOOD] (assert (= (table0 #x000e) s33))
 [GOOD] (assert (= (table0 #x000f) s34))
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert (not s37))
 [SEND] (check-sat)
 [RECV] unsat
diff --git a/SBVTestSuite/GoldFiles/barrelRotate_Left_Int16_Word32.gold b/SBVTestSuite/GoldFiles/barrelRotate_Left_Int16_Word32.gold
--- a/SBVTestSuite/GoldFiles/barrelRotate_Left_Int16_Word32.gold
+++ b/SBVTestSuite/GoldFiles/barrelRotate_Left_Int16_Word32.gold
@@ -21,7 +21,7 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s3 () (_ BitVec 32) (bvurem s1 s2))
 [GOOD] (define-fun s4 () (_ BitVec 1) ((_ extract 3 3) s3))
 [GOOD] (define-fun s6 () Bool (distinct s4 s5))
@@ -55,6 +55,11 @@
 [GOOD] (define-fun s34 () (_ BitVec 16) ((_ rotate_left 15) s0))
 [GOOD] (define-fun s36 () (_ BitVec 16) (ite (bvule #x00000010 s3) s35 (table0 s3)))
 [GOOD] (define-fun s37 () Bool (= s20 s36))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
 [GOOD] (assert (= (table0 #x00000000) s0))
 [GOOD] (assert (= (table0 #x00000001) s13))
 [GOOD] (assert (= (table0 #x00000002) s21))
@@ -71,6 +76,7 @@
 [GOOD] (assert (= (table0 #x0000000d) s32))
 [GOOD] (assert (= (table0 #x0000000e) s33))
 [GOOD] (assert (= (table0 #x0000000f) s34))
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert (not s37))
 [SEND] (check-sat)
 [RECV] unsat
diff --git a/SBVTestSuite/GoldFiles/barrelRotate_Left_Int16_Word64.gold b/SBVTestSuite/GoldFiles/barrelRotate_Left_Int16_Word64.gold
--- a/SBVTestSuite/GoldFiles/barrelRotate_Left_Int16_Word64.gold
+++ b/SBVTestSuite/GoldFiles/barrelRotate_Left_Int16_Word64.gold
@@ -21,7 +21,7 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s3 () (_ BitVec 64) (bvurem s1 s2))
 [GOOD] (define-fun s4 () (_ BitVec 1) ((_ extract 3 3) s3))
 [GOOD] (define-fun s6 () Bool (distinct s4 s5))
@@ -55,6 +55,11 @@
 [GOOD] (define-fun s34 () (_ BitVec 16) ((_ rotate_left 15) s0))
 [GOOD] (define-fun s36 () (_ BitVec 16) (ite (bvule #x0000000000000010 s3) s35 (table0 s3)))
 [GOOD] (define-fun s37 () Bool (= s20 s36))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
 [GOOD] (assert (= (table0 #x0000000000000000) s0))
 [GOOD] (assert (= (table0 #x0000000000000001) s13))
 [GOOD] (assert (= (table0 #x0000000000000002) s21))
@@ -71,6 +76,7 @@
 [GOOD] (assert (= (table0 #x000000000000000d) s32))
 [GOOD] (assert (= (table0 #x000000000000000e) s33))
 [GOOD] (assert (= (table0 #x000000000000000f) s34))
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert (not s37))
 [SEND] (check-sat)
 [RECV] unsat
diff --git a/SBVTestSuite/GoldFiles/barrelRotate_Left_Int16_Word8.gold b/SBVTestSuite/GoldFiles/barrelRotate_Left_Int16_Word8.gold
--- a/SBVTestSuite/GoldFiles/barrelRotate_Left_Int16_Word8.gold
+++ b/SBVTestSuite/GoldFiles/barrelRotate_Left_Int16_Word8.gold
@@ -21,7 +21,7 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s3 () (_ BitVec 8) (bvurem s1 s2))
 [GOOD] (define-fun s4 () (_ BitVec 1) ((_ extract 3 3) s3))
 [GOOD] (define-fun s6 () Bool (distinct s4 s5))
@@ -55,6 +55,11 @@
 [GOOD] (define-fun s34 () (_ BitVec 16) ((_ rotate_left 15) s0))
 [GOOD] (define-fun s36 () (_ BitVec 16) (ite (bvule #x10 s3) s35 (table0 s3)))
 [GOOD] (define-fun s37 () Bool (= s20 s36))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
 [GOOD] (assert (= (table0 #x00) s0))
 [GOOD] (assert (= (table0 #x01) s13))
 [GOOD] (assert (= (table0 #x02) s21))
@@ -71,6 +76,7 @@
 [GOOD] (assert (= (table0 #x0d) s32))
 [GOOD] (assert (= (table0 #x0e) s33))
 [GOOD] (assert (= (table0 #x0f) s34))
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert (not s37))
 [SEND] (check-sat)
 [RECV] unsat
diff --git a/SBVTestSuite/GoldFiles/barrelRotate_Left_Int32_Word16.gold b/SBVTestSuite/GoldFiles/barrelRotate_Left_Int32_Word16.gold
--- a/SBVTestSuite/GoldFiles/barrelRotate_Left_Int32_Word16.gold
+++ b/SBVTestSuite/GoldFiles/barrelRotate_Left_Int32_Word16.gold
@@ -21,7 +21,7 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s3 () (_ BitVec 16) (bvurem s1 s2))
 [GOOD] (define-fun s4 () (_ BitVec 1) ((_ extract 4 4) s3))
 [GOOD] (define-fun s6 () Bool (distinct s4 s5))
@@ -75,6 +75,11 @@
 [GOOD] (define-fun s54 () (_ BitVec 32) ((_ rotate_left 31) s0))
 [GOOD] (define-fun s56 () (_ BitVec 32) (ite (bvule #x0020 s3) s55 (table0 s3)))
 [GOOD] (define-fun s57 () Bool (= s24 s56))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
 [GOOD] (assert (= (table0 #x0000) s0))
 [GOOD] (assert (= (table0 #x0001) s15))
 [GOOD] (assert (= (table0 #x0002) s25))
@@ -107,6 +112,7 @@
 [GOOD] (assert (= (table0 #x001d) s52))
 [GOOD] (assert (= (table0 #x001e) s53))
 [GOOD] (assert (= (table0 #x001f) s54))
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert (not s57))
 [SEND] (check-sat)
 [RECV] unsat
diff --git a/SBVTestSuite/GoldFiles/barrelRotate_Left_Int32_Word32.gold b/SBVTestSuite/GoldFiles/barrelRotate_Left_Int32_Word32.gold
--- a/SBVTestSuite/GoldFiles/barrelRotate_Left_Int32_Word32.gold
+++ b/SBVTestSuite/GoldFiles/barrelRotate_Left_Int32_Word32.gold
@@ -21,7 +21,7 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s3 () (_ BitVec 32) (bvurem s1 s2))
 [GOOD] (define-fun s4 () (_ BitVec 1) ((_ extract 4 4) s3))
 [GOOD] (define-fun s6 () Bool (distinct s4 s5))
@@ -75,6 +75,11 @@
 [GOOD] (define-fun s54 () (_ BitVec 32) ((_ rotate_left 31) s0))
 [GOOD] (define-fun s56 () (_ BitVec 32) (ite (bvule #x00000020 s3) s55 (table0 s3)))
 [GOOD] (define-fun s57 () Bool (= s24 s56))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
 [GOOD] (assert (= (table0 #x00000000) s0))
 [GOOD] (assert (= (table0 #x00000001) s15))
 [GOOD] (assert (= (table0 #x00000002) s25))
@@ -107,6 +112,7 @@
 [GOOD] (assert (= (table0 #x0000001d) s52))
 [GOOD] (assert (= (table0 #x0000001e) s53))
 [GOOD] (assert (= (table0 #x0000001f) s54))
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert (not s57))
 [SEND] (check-sat)
 [RECV] unsat
diff --git a/SBVTestSuite/GoldFiles/barrelRotate_Left_Int32_Word64.gold b/SBVTestSuite/GoldFiles/barrelRotate_Left_Int32_Word64.gold
--- a/SBVTestSuite/GoldFiles/barrelRotate_Left_Int32_Word64.gold
+++ b/SBVTestSuite/GoldFiles/barrelRotate_Left_Int32_Word64.gold
@@ -21,7 +21,7 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s3 () (_ BitVec 64) (bvurem s1 s2))
 [GOOD] (define-fun s4 () (_ BitVec 1) ((_ extract 4 4) s3))
 [GOOD] (define-fun s6 () Bool (distinct s4 s5))
@@ -75,6 +75,11 @@
 [GOOD] (define-fun s54 () (_ BitVec 32) ((_ rotate_left 31) s0))
 [GOOD] (define-fun s56 () (_ BitVec 32) (ite (bvule #x0000000000000020 s3) s55 (table0 s3)))
 [GOOD] (define-fun s57 () Bool (= s24 s56))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
 [GOOD] (assert (= (table0 #x0000000000000000) s0))
 [GOOD] (assert (= (table0 #x0000000000000001) s15))
 [GOOD] (assert (= (table0 #x0000000000000002) s25))
@@ -107,6 +112,7 @@
 [GOOD] (assert (= (table0 #x000000000000001d) s52))
 [GOOD] (assert (= (table0 #x000000000000001e) s53))
 [GOOD] (assert (= (table0 #x000000000000001f) s54))
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert (not s57))
 [SEND] (check-sat)
 [RECV] unsat
diff --git a/SBVTestSuite/GoldFiles/barrelRotate_Left_Int32_Word8.gold b/SBVTestSuite/GoldFiles/barrelRotate_Left_Int32_Word8.gold
--- a/SBVTestSuite/GoldFiles/barrelRotate_Left_Int32_Word8.gold
+++ b/SBVTestSuite/GoldFiles/barrelRotate_Left_Int32_Word8.gold
@@ -21,7 +21,7 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s3 () (_ BitVec 8) (bvurem s1 s2))
 [GOOD] (define-fun s4 () (_ BitVec 1) ((_ extract 4 4) s3))
 [GOOD] (define-fun s6 () Bool (distinct s4 s5))
@@ -75,6 +75,11 @@
 [GOOD] (define-fun s54 () (_ BitVec 32) ((_ rotate_left 31) s0))
 [GOOD] (define-fun s56 () (_ BitVec 32) (ite (bvule #x20 s3) s55 (table0 s3)))
 [GOOD] (define-fun s57 () Bool (= s24 s56))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
 [GOOD] (assert (= (table0 #x00) s0))
 [GOOD] (assert (= (table0 #x01) s15))
 [GOOD] (assert (= (table0 #x02) s25))
@@ -107,6 +112,7 @@
 [GOOD] (assert (= (table0 #x1d) s52))
 [GOOD] (assert (= (table0 #x1e) s53))
 [GOOD] (assert (= (table0 #x1f) s54))
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert (not s57))
 [SEND] (check-sat)
 [RECV] unsat
diff --git a/SBVTestSuite/GoldFiles/barrelRotate_Left_Int64_Word16.gold b/SBVTestSuite/GoldFiles/barrelRotate_Left_Int64_Word16.gold
--- a/SBVTestSuite/GoldFiles/barrelRotate_Left_Int64_Word16.gold
+++ b/SBVTestSuite/GoldFiles/barrelRotate_Left_Int64_Word16.gold
@@ -21,7 +21,7 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s3 () (_ BitVec 16) (bvurem s1 s2))
 [GOOD] (define-fun s4 () (_ BitVec 1) ((_ extract 5 5) s3))
 [GOOD] (define-fun s6 () Bool (distinct s4 s5))
@@ -111,6 +111,11 @@
 [GOOD] (define-fun s90 () (_ BitVec 64) ((_ rotate_left 63) s0))
 [GOOD] (define-fun s92 () (_ BitVec 64) (ite (bvule #x0040 s3) s91 (table0 s3)))
 [GOOD] (define-fun s93 () Bool (= s28 s92))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
 [GOOD] (assert (= (table0 #x0000) s0))
 [GOOD] (assert (= (table0 #x0001) s17))
 [GOOD] (assert (= (table0 #x0002) s29))
@@ -175,6 +180,7 @@
 [GOOD] (assert (= (table0 #x003d) s88))
 [GOOD] (assert (= (table0 #x003e) s89))
 [GOOD] (assert (= (table0 #x003f) s90))
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert (not s93))
 [SEND] (check-sat)
 [RECV] unsat
diff --git a/SBVTestSuite/GoldFiles/barrelRotate_Left_Int64_Word32.gold b/SBVTestSuite/GoldFiles/barrelRotate_Left_Int64_Word32.gold
--- a/SBVTestSuite/GoldFiles/barrelRotate_Left_Int64_Word32.gold
+++ b/SBVTestSuite/GoldFiles/barrelRotate_Left_Int64_Word32.gold
@@ -21,7 +21,7 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s3 () (_ BitVec 32) (bvurem s1 s2))
 [GOOD] (define-fun s4 () (_ BitVec 1) ((_ extract 5 5) s3))
 [GOOD] (define-fun s6 () Bool (distinct s4 s5))
@@ -111,6 +111,11 @@
 [GOOD] (define-fun s90 () (_ BitVec 64) ((_ rotate_left 63) s0))
 [GOOD] (define-fun s92 () (_ BitVec 64) (ite (bvule #x00000040 s3) s91 (table0 s3)))
 [GOOD] (define-fun s93 () Bool (= s28 s92))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
 [GOOD] (assert (= (table0 #x00000000) s0))
 [GOOD] (assert (= (table0 #x00000001) s17))
 [GOOD] (assert (= (table0 #x00000002) s29))
@@ -175,6 +180,7 @@
 [GOOD] (assert (= (table0 #x0000003d) s88))
 [GOOD] (assert (= (table0 #x0000003e) s89))
 [GOOD] (assert (= (table0 #x0000003f) s90))
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert (not s93))
 [SEND] (check-sat)
 [RECV] unsat
diff --git a/SBVTestSuite/GoldFiles/barrelRotate_Left_Int64_Word64.gold b/SBVTestSuite/GoldFiles/barrelRotate_Left_Int64_Word64.gold
--- a/SBVTestSuite/GoldFiles/barrelRotate_Left_Int64_Word64.gold
+++ b/SBVTestSuite/GoldFiles/barrelRotate_Left_Int64_Word64.gold
@@ -21,7 +21,7 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s3 () (_ BitVec 64) (bvurem s1 s2))
 [GOOD] (define-fun s4 () (_ BitVec 1) ((_ extract 5 5) s3))
 [GOOD] (define-fun s6 () Bool (distinct s4 s5))
@@ -111,6 +111,11 @@
 [GOOD] (define-fun s90 () (_ BitVec 64) ((_ rotate_left 63) s0))
 [GOOD] (define-fun s92 () (_ BitVec 64) (ite (bvule #x0000000000000040 s3) s91 (table0 s3)))
 [GOOD] (define-fun s93 () Bool (= s28 s92))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
 [GOOD] (assert (= (table0 #x0000000000000000) s0))
 [GOOD] (assert (= (table0 #x0000000000000001) s17))
 [GOOD] (assert (= (table0 #x0000000000000002) s29))
@@ -175,6 +180,7 @@
 [GOOD] (assert (= (table0 #x000000000000003d) s88))
 [GOOD] (assert (= (table0 #x000000000000003e) s89))
 [GOOD] (assert (= (table0 #x000000000000003f) s90))
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert (not s93))
 [SEND] (check-sat)
 [RECV] unsat
diff --git a/SBVTestSuite/GoldFiles/barrelRotate_Left_Int64_Word8.gold b/SBVTestSuite/GoldFiles/barrelRotate_Left_Int64_Word8.gold
--- a/SBVTestSuite/GoldFiles/barrelRotate_Left_Int64_Word8.gold
+++ b/SBVTestSuite/GoldFiles/barrelRotate_Left_Int64_Word8.gold
@@ -21,7 +21,7 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s3 () (_ BitVec 8) (bvurem s1 s2))
 [GOOD] (define-fun s4 () (_ BitVec 1) ((_ extract 5 5) s3))
 [GOOD] (define-fun s6 () Bool (distinct s4 s5))
@@ -111,6 +111,11 @@
 [GOOD] (define-fun s90 () (_ BitVec 64) ((_ rotate_left 63) s0))
 [GOOD] (define-fun s92 () (_ BitVec 64) (ite (bvule #x40 s3) s91 (table0 s3)))
 [GOOD] (define-fun s93 () Bool (= s28 s92))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
 [GOOD] (assert (= (table0 #x00) s0))
 [GOOD] (assert (= (table0 #x01) s17))
 [GOOD] (assert (= (table0 #x02) s29))
@@ -175,6 +180,7 @@
 [GOOD] (assert (= (table0 #x3d) s88))
 [GOOD] (assert (= (table0 #x3e) s89))
 [GOOD] (assert (= (table0 #x3f) s90))
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert (not s93))
 [SEND] (check-sat)
 [RECV] unsat
diff --git a/SBVTestSuite/GoldFiles/barrelRotate_Left_Int8_Word16.gold b/SBVTestSuite/GoldFiles/barrelRotate_Left_Int8_Word16.gold
--- a/SBVTestSuite/GoldFiles/barrelRotate_Left_Int8_Word16.gold
+++ b/SBVTestSuite/GoldFiles/barrelRotate_Left_Int8_Word16.gold
@@ -21,7 +21,7 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s3 () (_ BitVec 16) (bvurem s1 s2))
 [GOOD] (define-fun s4 () (_ BitVec 1) ((_ extract 2 2) s3))
 [GOOD] (define-fun s6 () Bool (distinct s4 s5))
@@ -43,6 +43,11 @@
 [GOOD] (define-fun s22 () (_ BitVec 8) ((_ rotate_left 7) s0))
 [GOOD] (define-fun s24 () (_ BitVec 8) (ite (bvule #x0008 s3) s23 (table0 s3)))
 [GOOD] (define-fun s25 () Bool (= s16 s24))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
 [GOOD] (assert (= (table0 #x0000) s0))
 [GOOD] (assert (= (table0 #x0001) s11))
 [GOOD] (assert (= (table0 #x0002) s17))
@@ -51,6 +56,7 @@
 [GOOD] (assert (= (table0 #x0005) s20))
 [GOOD] (assert (= (table0 #x0006) s21))
 [GOOD] (assert (= (table0 #x0007) s22))
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert (not s25))
 [SEND] (check-sat)
 [RECV] unsat
diff --git a/SBVTestSuite/GoldFiles/barrelRotate_Left_Int8_Word32.gold b/SBVTestSuite/GoldFiles/barrelRotate_Left_Int8_Word32.gold
--- a/SBVTestSuite/GoldFiles/barrelRotate_Left_Int8_Word32.gold
+++ b/SBVTestSuite/GoldFiles/barrelRotate_Left_Int8_Word32.gold
@@ -21,7 +21,7 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s3 () (_ BitVec 32) (bvurem s1 s2))
 [GOOD] (define-fun s4 () (_ BitVec 1) ((_ extract 2 2) s3))
 [GOOD] (define-fun s6 () Bool (distinct s4 s5))
@@ -43,6 +43,11 @@
 [GOOD] (define-fun s22 () (_ BitVec 8) ((_ rotate_left 7) s0))
 [GOOD] (define-fun s24 () (_ BitVec 8) (ite (bvule #x00000008 s3) s23 (table0 s3)))
 [GOOD] (define-fun s25 () Bool (= s16 s24))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
 [GOOD] (assert (= (table0 #x00000000) s0))
 [GOOD] (assert (= (table0 #x00000001) s11))
 [GOOD] (assert (= (table0 #x00000002) s17))
@@ -51,6 +56,7 @@
 [GOOD] (assert (= (table0 #x00000005) s20))
 [GOOD] (assert (= (table0 #x00000006) s21))
 [GOOD] (assert (= (table0 #x00000007) s22))
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert (not s25))
 [SEND] (check-sat)
 [RECV] unsat
diff --git a/SBVTestSuite/GoldFiles/barrelRotate_Left_Int8_Word64.gold b/SBVTestSuite/GoldFiles/barrelRotate_Left_Int8_Word64.gold
--- a/SBVTestSuite/GoldFiles/barrelRotate_Left_Int8_Word64.gold
+++ b/SBVTestSuite/GoldFiles/barrelRotate_Left_Int8_Word64.gold
@@ -21,7 +21,7 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s3 () (_ BitVec 64) (bvurem s1 s2))
 [GOOD] (define-fun s4 () (_ BitVec 1) ((_ extract 2 2) s3))
 [GOOD] (define-fun s6 () Bool (distinct s4 s5))
@@ -43,6 +43,11 @@
 [GOOD] (define-fun s22 () (_ BitVec 8) ((_ rotate_left 7) s0))
 [GOOD] (define-fun s24 () (_ BitVec 8) (ite (bvule #x0000000000000008 s3) s23 (table0 s3)))
 [GOOD] (define-fun s25 () Bool (= s16 s24))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
 [GOOD] (assert (= (table0 #x0000000000000000) s0))
 [GOOD] (assert (= (table0 #x0000000000000001) s11))
 [GOOD] (assert (= (table0 #x0000000000000002) s17))
@@ -51,6 +56,7 @@
 [GOOD] (assert (= (table0 #x0000000000000005) s20))
 [GOOD] (assert (= (table0 #x0000000000000006) s21))
 [GOOD] (assert (= (table0 #x0000000000000007) s22))
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert (not s25))
 [SEND] (check-sat)
 [RECV] unsat
diff --git a/SBVTestSuite/GoldFiles/barrelRotate_Left_Int8_Word8.gold b/SBVTestSuite/GoldFiles/barrelRotate_Left_Int8_Word8.gold
--- a/SBVTestSuite/GoldFiles/barrelRotate_Left_Int8_Word8.gold
+++ b/SBVTestSuite/GoldFiles/barrelRotate_Left_Int8_Word8.gold
@@ -21,7 +21,7 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s3 () (_ BitVec 8) (bvurem s1 s2))
 [GOOD] (define-fun s4 () (_ BitVec 1) ((_ extract 2 2) s3))
 [GOOD] (define-fun s6 () Bool (distinct s4 s5))
@@ -43,6 +43,11 @@
 [GOOD] (define-fun s22 () (_ BitVec 8) ((_ rotate_left 7) s0))
 [GOOD] (define-fun s24 () (_ BitVec 8) (ite (bvule #x08 s3) s23 (table0 s3)))
 [GOOD] (define-fun s25 () Bool (= s16 s24))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
 [GOOD] (assert (= (table0 #x00) s0))
 [GOOD] (assert (= (table0 #x01) s11))
 [GOOD] (assert (= (table0 #x02) s17))
@@ -51,6 +56,7 @@
 [GOOD] (assert (= (table0 #x05) s20))
 [GOOD] (assert (= (table0 #x06) s21))
 [GOOD] (assert (= (table0 #x07) s22))
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert (not s25))
 [SEND] (check-sat)
 [RECV] unsat
diff --git a/SBVTestSuite/GoldFiles/barrelRotate_Left_Word16_Word16.gold b/SBVTestSuite/GoldFiles/barrelRotate_Left_Word16_Word16.gold
--- a/SBVTestSuite/GoldFiles/barrelRotate_Left_Word16_Word16.gold
+++ b/SBVTestSuite/GoldFiles/barrelRotate_Left_Word16_Word16.gold
@@ -21,7 +21,7 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s3 () (_ BitVec 16) (bvurem s1 s2))
 [GOOD] (define-fun s4 () (_ BitVec 1) ((_ extract 3 3) s3))
 [GOOD] (define-fun s6 () Bool (distinct s4 s5))
@@ -55,6 +55,11 @@
 [GOOD] (define-fun s34 () (_ BitVec 16) ((_ rotate_left 15) s0))
 [GOOD] (define-fun s36 () (_ BitVec 16) (ite (bvule #x0010 s3) s35 (table0 s3)))
 [GOOD] (define-fun s37 () Bool (= s20 s36))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
 [GOOD] (assert (= (table0 #x0000) s0))
 [GOOD] (assert (= (table0 #x0001) s13))
 [GOOD] (assert (= (table0 #x0002) s21))
@@ -71,6 +76,7 @@
 [GOOD] (assert (= (table0 #x000d) s32))
 [GOOD] (assert (= (table0 #x000e) s33))
 [GOOD] (assert (= (table0 #x000f) s34))
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert (not s37))
 [SEND] (check-sat)
 [RECV] unsat
diff --git a/SBVTestSuite/GoldFiles/barrelRotate_Left_Word16_Word32.gold b/SBVTestSuite/GoldFiles/barrelRotate_Left_Word16_Word32.gold
--- a/SBVTestSuite/GoldFiles/barrelRotate_Left_Word16_Word32.gold
+++ b/SBVTestSuite/GoldFiles/barrelRotate_Left_Word16_Word32.gold
@@ -21,7 +21,7 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s3 () (_ BitVec 32) (bvurem s1 s2))
 [GOOD] (define-fun s4 () (_ BitVec 1) ((_ extract 3 3) s3))
 [GOOD] (define-fun s6 () Bool (distinct s4 s5))
@@ -55,6 +55,11 @@
 [GOOD] (define-fun s34 () (_ BitVec 16) ((_ rotate_left 15) s0))
 [GOOD] (define-fun s36 () (_ BitVec 16) (ite (bvule #x00000010 s3) s35 (table0 s3)))
 [GOOD] (define-fun s37 () Bool (= s20 s36))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
 [GOOD] (assert (= (table0 #x00000000) s0))
 [GOOD] (assert (= (table0 #x00000001) s13))
 [GOOD] (assert (= (table0 #x00000002) s21))
@@ -71,6 +76,7 @@
 [GOOD] (assert (= (table0 #x0000000d) s32))
 [GOOD] (assert (= (table0 #x0000000e) s33))
 [GOOD] (assert (= (table0 #x0000000f) s34))
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert (not s37))
 [SEND] (check-sat)
 [RECV] unsat
diff --git a/SBVTestSuite/GoldFiles/barrelRotate_Left_Word16_Word64.gold b/SBVTestSuite/GoldFiles/barrelRotate_Left_Word16_Word64.gold
--- a/SBVTestSuite/GoldFiles/barrelRotate_Left_Word16_Word64.gold
+++ b/SBVTestSuite/GoldFiles/barrelRotate_Left_Word16_Word64.gold
@@ -21,7 +21,7 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s3 () (_ BitVec 64) (bvurem s1 s2))
 [GOOD] (define-fun s4 () (_ BitVec 1) ((_ extract 3 3) s3))
 [GOOD] (define-fun s6 () Bool (distinct s4 s5))
@@ -55,6 +55,11 @@
 [GOOD] (define-fun s34 () (_ BitVec 16) ((_ rotate_left 15) s0))
 [GOOD] (define-fun s36 () (_ BitVec 16) (ite (bvule #x0000000000000010 s3) s35 (table0 s3)))
 [GOOD] (define-fun s37 () Bool (= s20 s36))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
 [GOOD] (assert (= (table0 #x0000000000000000) s0))
 [GOOD] (assert (= (table0 #x0000000000000001) s13))
 [GOOD] (assert (= (table0 #x0000000000000002) s21))
@@ -71,6 +76,7 @@
 [GOOD] (assert (= (table0 #x000000000000000d) s32))
 [GOOD] (assert (= (table0 #x000000000000000e) s33))
 [GOOD] (assert (= (table0 #x000000000000000f) s34))
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert (not s37))
 [SEND] (check-sat)
 [RECV] unsat
diff --git a/SBVTestSuite/GoldFiles/barrelRotate_Left_Word16_Word8.gold b/SBVTestSuite/GoldFiles/barrelRotate_Left_Word16_Word8.gold
--- a/SBVTestSuite/GoldFiles/barrelRotate_Left_Word16_Word8.gold
+++ b/SBVTestSuite/GoldFiles/barrelRotate_Left_Word16_Word8.gold
@@ -21,7 +21,7 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s3 () (_ BitVec 8) (bvurem s1 s2))
 [GOOD] (define-fun s4 () (_ BitVec 1) ((_ extract 3 3) s3))
 [GOOD] (define-fun s6 () Bool (distinct s4 s5))
@@ -55,6 +55,11 @@
 [GOOD] (define-fun s34 () (_ BitVec 16) ((_ rotate_left 15) s0))
 [GOOD] (define-fun s36 () (_ BitVec 16) (ite (bvule #x10 s3) s35 (table0 s3)))
 [GOOD] (define-fun s37 () Bool (= s20 s36))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
 [GOOD] (assert (= (table0 #x00) s0))
 [GOOD] (assert (= (table0 #x01) s13))
 [GOOD] (assert (= (table0 #x02) s21))
@@ -71,6 +76,7 @@
 [GOOD] (assert (= (table0 #x0d) s32))
 [GOOD] (assert (= (table0 #x0e) s33))
 [GOOD] (assert (= (table0 #x0f) s34))
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert (not s37))
 [SEND] (check-sat)
 [RECV] unsat
diff --git a/SBVTestSuite/GoldFiles/barrelRotate_Left_Word32_Word16.gold b/SBVTestSuite/GoldFiles/barrelRotate_Left_Word32_Word16.gold
--- a/SBVTestSuite/GoldFiles/barrelRotate_Left_Word32_Word16.gold
+++ b/SBVTestSuite/GoldFiles/barrelRotate_Left_Word32_Word16.gold
@@ -21,7 +21,7 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s3 () (_ BitVec 16) (bvurem s1 s2))
 [GOOD] (define-fun s4 () (_ BitVec 1) ((_ extract 4 4) s3))
 [GOOD] (define-fun s6 () Bool (distinct s4 s5))
@@ -75,6 +75,11 @@
 [GOOD] (define-fun s54 () (_ BitVec 32) ((_ rotate_left 31) s0))
 [GOOD] (define-fun s56 () (_ BitVec 32) (ite (bvule #x0020 s3) s55 (table0 s3)))
 [GOOD] (define-fun s57 () Bool (= s24 s56))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
 [GOOD] (assert (= (table0 #x0000) s0))
 [GOOD] (assert (= (table0 #x0001) s15))
 [GOOD] (assert (= (table0 #x0002) s25))
@@ -107,6 +112,7 @@
 [GOOD] (assert (= (table0 #x001d) s52))
 [GOOD] (assert (= (table0 #x001e) s53))
 [GOOD] (assert (= (table0 #x001f) s54))
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert (not s57))
 [SEND] (check-sat)
 [RECV] unsat
diff --git a/SBVTestSuite/GoldFiles/barrelRotate_Left_Word32_Word32.gold b/SBVTestSuite/GoldFiles/barrelRotate_Left_Word32_Word32.gold
--- a/SBVTestSuite/GoldFiles/barrelRotate_Left_Word32_Word32.gold
+++ b/SBVTestSuite/GoldFiles/barrelRotate_Left_Word32_Word32.gold
@@ -21,7 +21,7 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s3 () (_ BitVec 32) (bvurem s1 s2))
 [GOOD] (define-fun s4 () (_ BitVec 1) ((_ extract 4 4) s3))
 [GOOD] (define-fun s6 () Bool (distinct s4 s5))
@@ -75,6 +75,11 @@
 [GOOD] (define-fun s54 () (_ BitVec 32) ((_ rotate_left 31) s0))
 [GOOD] (define-fun s56 () (_ BitVec 32) (ite (bvule #x00000020 s3) s55 (table0 s3)))
 [GOOD] (define-fun s57 () Bool (= s24 s56))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
 [GOOD] (assert (= (table0 #x00000000) s0))
 [GOOD] (assert (= (table0 #x00000001) s15))
 [GOOD] (assert (= (table0 #x00000002) s25))
@@ -107,6 +112,7 @@
 [GOOD] (assert (= (table0 #x0000001d) s52))
 [GOOD] (assert (= (table0 #x0000001e) s53))
 [GOOD] (assert (= (table0 #x0000001f) s54))
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert (not s57))
 [SEND] (check-sat)
 [RECV] unsat
diff --git a/SBVTestSuite/GoldFiles/barrelRotate_Left_Word32_Word64.gold b/SBVTestSuite/GoldFiles/barrelRotate_Left_Word32_Word64.gold
--- a/SBVTestSuite/GoldFiles/barrelRotate_Left_Word32_Word64.gold
+++ b/SBVTestSuite/GoldFiles/barrelRotate_Left_Word32_Word64.gold
@@ -21,7 +21,7 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s3 () (_ BitVec 64) (bvurem s1 s2))
 [GOOD] (define-fun s4 () (_ BitVec 1) ((_ extract 4 4) s3))
 [GOOD] (define-fun s6 () Bool (distinct s4 s5))
@@ -75,6 +75,11 @@
 [GOOD] (define-fun s54 () (_ BitVec 32) ((_ rotate_left 31) s0))
 [GOOD] (define-fun s56 () (_ BitVec 32) (ite (bvule #x0000000000000020 s3) s55 (table0 s3)))
 [GOOD] (define-fun s57 () Bool (= s24 s56))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
 [GOOD] (assert (= (table0 #x0000000000000000) s0))
 [GOOD] (assert (= (table0 #x0000000000000001) s15))
 [GOOD] (assert (= (table0 #x0000000000000002) s25))
@@ -107,6 +112,7 @@
 [GOOD] (assert (= (table0 #x000000000000001d) s52))
 [GOOD] (assert (= (table0 #x000000000000001e) s53))
 [GOOD] (assert (= (table0 #x000000000000001f) s54))
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert (not s57))
 [SEND] (check-sat)
 [RECV] unsat
diff --git a/SBVTestSuite/GoldFiles/barrelRotate_Left_Word32_Word8.gold b/SBVTestSuite/GoldFiles/barrelRotate_Left_Word32_Word8.gold
--- a/SBVTestSuite/GoldFiles/barrelRotate_Left_Word32_Word8.gold
+++ b/SBVTestSuite/GoldFiles/barrelRotate_Left_Word32_Word8.gold
@@ -21,7 +21,7 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s3 () (_ BitVec 8) (bvurem s1 s2))
 [GOOD] (define-fun s4 () (_ BitVec 1) ((_ extract 4 4) s3))
 [GOOD] (define-fun s6 () Bool (distinct s4 s5))
@@ -75,6 +75,11 @@
 [GOOD] (define-fun s54 () (_ BitVec 32) ((_ rotate_left 31) s0))
 [GOOD] (define-fun s56 () (_ BitVec 32) (ite (bvule #x20 s3) s55 (table0 s3)))
 [GOOD] (define-fun s57 () Bool (= s24 s56))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
 [GOOD] (assert (= (table0 #x00) s0))
 [GOOD] (assert (= (table0 #x01) s15))
 [GOOD] (assert (= (table0 #x02) s25))
@@ -107,6 +112,7 @@
 [GOOD] (assert (= (table0 #x1d) s52))
 [GOOD] (assert (= (table0 #x1e) s53))
 [GOOD] (assert (= (table0 #x1f) s54))
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert (not s57))
 [SEND] (check-sat)
 [RECV] unsat
diff --git a/SBVTestSuite/GoldFiles/barrelRotate_Left_Word64_Word16.gold b/SBVTestSuite/GoldFiles/barrelRotate_Left_Word64_Word16.gold
--- a/SBVTestSuite/GoldFiles/barrelRotate_Left_Word64_Word16.gold
+++ b/SBVTestSuite/GoldFiles/barrelRotate_Left_Word64_Word16.gold
@@ -21,7 +21,7 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s3 () (_ BitVec 16) (bvurem s1 s2))
 [GOOD] (define-fun s4 () (_ BitVec 1) ((_ extract 5 5) s3))
 [GOOD] (define-fun s6 () Bool (distinct s4 s5))
@@ -111,6 +111,11 @@
 [GOOD] (define-fun s90 () (_ BitVec 64) ((_ rotate_left 63) s0))
 [GOOD] (define-fun s92 () (_ BitVec 64) (ite (bvule #x0040 s3) s91 (table0 s3)))
 [GOOD] (define-fun s93 () Bool (= s28 s92))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
 [GOOD] (assert (= (table0 #x0000) s0))
 [GOOD] (assert (= (table0 #x0001) s17))
 [GOOD] (assert (= (table0 #x0002) s29))
@@ -175,6 +180,7 @@
 [GOOD] (assert (= (table0 #x003d) s88))
 [GOOD] (assert (= (table0 #x003e) s89))
 [GOOD] (assert (= (table0 #x003f) s90))
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert (not s93))
 [SEND] (check-sat)
 [RECV] unsat
diff --git a/SBVTestSuite/GoldFiles/barrelRotate_Left_Word64_Word32.gold b/SBVTestSuite/GoldFiles/barrelRotate_Left_Word64_Word32.gold
--- a/SBVTestSuite/GoldFiles/barrelRotate_Left_Word64_Word32.gold
+++ b/SBVTestSuite/GoldFiles/barrelRotate_Left_Word64_Word32.gold
@@ -21,7 +21,7 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s3 () (_ BitVec 32) (bvurem s1 s2))
 [GOOD] (define-fun s4 () (_ BitVec 1) ((_ extract 5 5) s3))
 [GOOD] (define-fun s6 () Bool (distinct s4 s5))
@@ -111,6 +111,11 @@
 [GOOD] (define-fun s90 () (_ BitVec 64) ((_ rotate_left 63) s0))
 [GOOD] (define-fun s92 () (_ BitVec 64) (ite (bvule #x00000040 s3) s91 (table0 s3)))
 [GOOD] (define-fun s93 () Bool (= s28 s92))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
 [GOOD] (assert (= (table0 #x00000000) s0))
 [GOOD] (assert (= (table0 #x00000001) s17))
 [GOOD] (assert (= (table0 #x00000002) s29))
@@ -175,6 +180,7 @@
 [GOOD] (assert (= (table0 #x0000003d) s88))
 [GOOD] (assert (= (table0 #x0000003e) s89))
 [GOOD] (assert (= (table0 #x0000003f) s90))
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert (not s93))
 [SEND] (check-sat)
 [RECV] unsat
diff --git a/SBVTestSuite/GoldFiles/barrelRotate_Left_Word64_Word64.gold b/SBVTestSuite/GoldFiles/barrelRotate_Left_Word64_Word64.gold
--- a/SBVTestSuite/GoldFiles/barrelRotate_Left_Word64_Word64.gold
+++ b/SBVTestSuite/GoldFiles/barrelRotate_Left_Word64_Word64.gold
@@ -21,7 +21,7 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s3 () (_ BitVec 64) (bvurem s1 s2))
 [GOOD] (define-fun s4 () (_ BitVec 1) ((_ extract 5 5) s3))
 [GOOD] (define-fun s6 () Bool (distinct s4 s5))
@@ -111,6 +111,11 @@
 [GOOD] (define-fun s90 () (_ BitVec 64) ((_ rotate_left 63) s0))
 [GOOD] (define-fun s92 () (_ BitVec 64) (ite (bvule #x0000000000000040 s3) s91 (table0 s3)))
 [GOOD] (define-fun s93 () Bool (= s28 s92))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
 [GOOD] (assert (= (table0 #x0000000000000000) s0))
 [GOOD] (assert (= (table0 #x0000000000000001) s17))
 [GOOD] (assert (= (table0 #x0000000000000002) s29))
@@ -175,6 +180,7 @@
 [GOOD] (assert (= (table0 #x000000000000003d) s88))
 [GOOD] (assert (= (table0 #x000000000000003e) s89))
 [GOOD] (assert (= (table0 #x000000000000003f) s90))
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert (not s93))
 [SEND] (check-sat)
 [RECV] unsat
diff --git a/SBVTestSuite/GoldFiles/barrelRotate_Left_Word64_Word8.gold b/SBVTestSuite/GoldFiles/barrelRotate_Left_Word64_Word8.gold
--- a/SBVTestSuite/GoldFiles/barrelRotate_Left_Word64_Word8.gold
+++ b/SBVTestSuite/GoldFiles/barrelRotate_Left_Word64_Word8.gold
@@ -21,7 +21,7 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s3 () (_ BitVec 8) (bvurem s1 s2))
 [GOOD] (define-fun s4 () (_ BitVec 1) ((_ extract 5 5) s3))
 [GOOD] (define-fun s6 () Bool (distinct s4 s5))
@@ -111,6 +111,11 @@
 [GOOD] (define-fun s90 () (_ BitVec 64) ((_ rotate_left 63) s0))
 [GOOD] (define-fun s92 () (_ BitVec 64) (ite (bvule #x40 s3) s91 (table0 s3)))
 [GOOD] (define-fun s93 () Bool (= s28 s92))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
 [GOOD] (assert (= (table0 #x00) s0))
 [GOOD] (assert (= (table0 #x01) s17))
 [GOOD] (assert (= (table0 #x02) s29))
@@ -175,6 +180,7 @@
 [GOOD] (assert (= (table0 #x3d) s88))
 [GOOD] (assert (= (table0 #x3e) s89))
 [GOOD] (assert (= (table0 #x3f) s90))
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert (not s93))
 [SEND] (check-sat)
 [RECV] unsat
diff --git a/SBVTestSuite/GoldFiles/barrelRotate_Left_Word8_Word16.gold b/SBVTestSuite/GoldFiles/barrelRotate_Left_Word8_Word16.gold
--- a/SBVTestSuite/GoldFiles/barrelRotate_Left_Word8_Word16.gold
+++ b/SBVTestSuite/GoldFiles/barrelRotate_Left_Word8_Word16.gold
@@ -21,7 +21,7 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s3 () (_ BitVec 16) (bvurem s1 s2))
 [GOOD] (define-fun s4 () (_ BitVec 1) ((_ extract 2 2) s3))
 [GOOD] (define-fun s6 () Bool (distinct s4 s5))
@@ -43,6 +43,11 @@
 [GOOD] (define-fun s22 () (_ BitVec 8) ((_ rotate_left 7) s0))
 [GOOD] (define-fun s24 () (_ BitVec 8) (ite (bvule #x0008 s3) s23 (table0 s3)))
 [GOOD] (define-fun s25 () Bool (= s16 s24))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
 [GOOD] (assert (= (table0 #x0000) s0))
 [GOOD] (assert (= (table0 #x0001) s11))
 [GOOD] (assert (= (table0 #x0002) s17))
@@ -51,6 +56,7 @@
 [GOOD] (assert (= (table0 #x0005) s20))
 [GOOD] (assert (= (table0 #x0006) s21))
 [GOOD] (assert (= (table0 #x0007) s22))
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert (not s25))
 [SEND] (check-sat)
 [RECV] unsat
diff --git a/SBVTestSuite/GoldFiles/barrelRotate_Left_Word8_Word32.gold b/SBVTestSuite/GoldFiles/barrelRotate_Left_Word8_Word32.gold
--- a/SBVTestSuite/GoldFiles/barrelRotate_Left_Word8_Word32.gold
+++ b/SBVTestSuite/GoldFiles/barrelRotate_Left_Word8_Word32.gold
@@ -21,7 +21,7 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s3 () (_ BitVec 32) (bvurem s1 s2))
 [GOOD] (define-fun s4 () (_ BitVec 1) ((_ extract 2 2) s3))
 [GOOD] (define-fun s6 () Bool (distinct s4 s5))
@@ -43,6 +43,11 @@
 [GOOD] (define-fun s22 () (_ BitVec 8) ((_ rotate_left 7) s0))
 [GOOD] (define-fun s24 () (_ BitVec 8) (ite (bvule #x00000008 s3) s23 (table0 s3)))
 [GOOD] (define-fun s25 () Bool (= s16 s24))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
 [GOOD] (assert (= (table0 #x00000000) s0))
 [GOOD] (assert (= (table0 #x00000001) s11))
 [GOOD] (assert (= (table0 #x00000002) s17))
@@ -51,6 +56,7 @@
 [GOOD] (assert (= (table0 #x00000005) s20))
 [GOOD] (assert (= (table0 #x00000006) s21))
 [GOOD] (assert (= (table0 #x00000007) s22))
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert (not s25))
 [SEND] (check-sat)
 [RECV] unsat
diff --git a/SBVTestSuite/GoldFiles/barrelRotate_Left_Word8_Word64.gold b/SBVTestSuite/GoldFiles/barrelRotate_Left_Word8_Word64.gold
--- a/SBVTestSuite/GoldFiles/barrelRotate_Left_Word8_Word64.gold
+++ b/SBVTestSuite/GoldFiles/barrelRotate_Left_Word8_Word64.gold
@@ -21,7 +21,7 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s3 () (_ BitVec 64) (bvurem s1 s2))
 [GOOD] (define-fun s4 () (_ BitVec 1) ((_ extract 2 2) s3))
 [GOOD] (define-fun s6 () Bool (distinct s4 s5))
@@ -43,6 +43,11 @@
 [GOOD] (define-fun s22 () (_ BitVec 8) ((_ rotate_left 7) s0))
 [GOOD] (define-fun s24 () (_ BitVec 8) (ite (bvule #x0000000000000008 s3) s23 (table0 s3)))
 [GOOD] (define-fun s25 () Bool (= s16 s24))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
 [GOOD] (assert (= (table0 #x0000000000000000) s0))
 [GOOD] (assert (= (table0 #x0000000000000001) s11))
 [GOOD] (assert (= (table0 #x0000000000000002) s17))
@@ -51,6 +56,7 @@
 [GOOD] (assert (= (table0 #x0000000000000005) s20))
 [GOOD] (assert (= (table0 #x0000000000000006) s21))
 [GOOD] (assert (= (table0 #x0000000000000007) s22))
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert (not s25))
 [SEND] (check-sat)
 [RECV] unsat
diff --git a/SBVTestSuite/GoldFiles/barrelRotate_Left_Word8_Word8.gold b/SBVTestSuite/GoldFiles/barrelRotate_Left_Word8_Word8.gold
--- a/SBVTestSuite/GoldFiles/barrelRotate_Left_Word8_Word8.gold
+++ b/SBVTestSuite/GoldFiles/barrelRotate_Left_Word8_Word8.gold
@@ -21,7 +21,7 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s3 () (_ BitVec 8) (bvurem s1 s2))
 [GOOD] (define-fun s4 () (_ BitVec 1) ((_ extract 2 2) s3))
 [GOOD] (define-fun s6 () Bool (distinct s4 s5))
@@ -43,6 +43,11 @@
 [GOOD] (define-fun s22 () (_ BitVec 8) ((_ rotate_left 7) s0))
 [GOOD] (define-fun s24 () (_ BitVec 8) (ite (bvule #x08 s3) s23 (table0 s3)))
 [GOOD] (define-fun s25 () Bool (= s16 s24))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
 [GOOD] (assert (= (table0 #x00) s0))
 [GOOD] (assert (= (table0 #x01) s11))
 [GOOD] (assert (= (table0 #x02) s17))
@@ -51,6 +56,7 @@
 [GOOD] (assert (= (table0 #x05) s20))
 [GOOD] (assert (= (table0 #x06) s21))
 [GOOD] (assert (= (table0 #x07) s22))
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert (not s25))
 [SEND] (check-sat)
 [RECV] unsat
diff --git a/SBVTestSuite/GoldFiles/barrelRotate_Right_Int16_Word16.gold b/SBVTestSuite/GoldFiles/barrelRotate_Right_Int16_Word16.gold
--- a/SBVTestSuite/GoldFiles/barrelRotate_Right_Int16_Word16.gold
+++ b/SBVTestSuite/GoldFiles/barrelRotate_Right_Int16_Word16.gold
@@ -21,7 +21,7 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s3 () (_ BitVec 16) (bvurem s1 s2))
 [GOOD] (define-fun s4 () (_ BitVec 1) ((_ extract 3 3) s3))
 [GOOD] (define-fun s6 () Bool (distinct s4 s5))
@@ -55,6 +55,11 @@
 [GOOD] (define-fun s34 () (_ BitVec 16) ((_ rotate_right 15) s0))
 [GOOD] (define-fun s36 () (_ BitVec 16) (ite (bvule #x0010 s3) s35 (table0 s3)))
 [GOOD] (define-fun s37 () Bool (= s20 s36))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
 [GOOD] (assert (= (table0 #x0000) s0))
 [GOOD] (assert (= (table0 #x0001) s13))
 [GOOD] (assert (= (table0 #x0002) s21))
@@ -71,6 +76,7 @@
 [GOOD] (assert (= (table0 #x000d) s32))
 [GOOD] (assert (= (table0 #x000e) s33))
 [GOOD] (assert (= (table0 #x000f) s34))
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert (not s37))
 [SEND] (check-sat)
 [RECV] unsat
diff --git a/SBVTestSuite/GoldFiles/barrelRotate_Right_Int16_Word32.gold b/SBVTestSuite/GoldFiles/barrelRotate_Right_Int16_Word32.gold
--- a/SBVTestSuite/GoldFiles/barrelRotate_Right_Int16_Word32.gold
+++ b/SBVTestSuite/GoldFiles/barrelRotate_Right_Int16_Word32.gold
@@ -21,7 +21,7 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s3 () (_ BitVec 32) (bvurem s1 s2))
 [GOOD] (define-fun s4 () (_ BitVec 1) ((_ extract 3 3) s3))
 [GOOD] (define-fun s6 () Bool (distinct s4 s5))
@@ -55,6 +55,11 @@
 [GOOD] (define-fun s34 () (_ BitVec 16) ((_ rotate_right 15) s0))
 [GOOD] (define-fun s36 () (_ BitVec 16) (ite (bvule #x00000010 s3) s35 (table0 s3)))
 [GOOD] (define-fun s37 () Bool (= s20 s36))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
 [GOOD] (assert (= (table0 #x00000000) s0))
 [GOOD] (assert (= (table0 #x00000001) s13))
 [GOOD] (assert (= (table0 #x00000002) s21))
@@ -71,6 +76,7 @@
 [GOOD] (assert (= (table0 #x0000000d) s32))
 [GOOD] (assert (= (table0 #x0000000e) s33))
 [GOOD] (assert (= (table0 #x0000000f) s34))
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert (not s37))
 [SEND] (check-sat)
 [RECV] unsat
diff --git a/SBVTestSuite/GoldFiles/barrelRotate_Right_Int16_Word64.gold b/SBVTestSuite/GoldFiles/barrelRotate_Right_Int16_Word64.gold
--- a/SBVTestSuite/GoldFiles/barrelRotate_Right_Int16_Word64.gold
+++ b/SBVTestSuite/GoldFiles/barrelRotate_Right_Int16_Word64.gold
@@ -21,7 +21,7 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s3 () (_ BitVec 64) (bvurem s1 s2))
 [GOOD] (define-fun s4 () (_ BitVec 1) ((_ extract 3 3) s3))
 [GOOD] (define-fun s6 () Bool (distinct s4 s5))
@@ -55,6 +55,11 @@
 [GOOD] (define-fun s34 () (_ BitVec 16) ((_ rotate_right 15) s0))
 [GOOD] (define-fun s36 () (_ BitVec 16) (ite (bvule #x0000000000000010 s3) s35 (table0 s3)))
 [GOOD] (define-fun s37 () Bool (= s20 s36))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
 [GOOD] (assert (= (table0 #x0000000000000000) s0))
 [GOOD] (assert (= (table0 #x0000000000000001) s13))
 [GOOD] (assert (= (table0 #x0000000000000002) s21))
@@ -71,6 +76,7 @@
 [GOOD] (assert (= (table0 #x000000000000000d) s32))
 [GOOD] (assert (= (table0 #x000000000000000e) s33))
 [GOOD] (assert (= (table0 #x000000000000000f) s34))
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert (not s37))
 [SEND] (check-sat)
 [RECV] unsat
diff --git a/SBVTestSuite/GoldFiles/barrelRotate_Right_Int16_Word8.gold b/SBVTestSuite/GoldFiles/barrelRotate_Right_Int16_Word8.gold
--- a/SBVTestSuite/GoldFiles/barrelRotate_Right_Int16_Word8.gold
+++ b/SBVTestSuite/GoldFiles/barrelRotate_Right_Int16_Word8.gold
@@ -21,7 +21,7 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s3 () (_ BitVec 8) (bvurem s1 s2))
 [GOOD] (define-fun s4 () (_ BitVec 1) ((_ extract 3 3) s3))
 [GOOD] (define-fun s6 () Bool (distinct s4 s5))
@@ -55,6 +55,11 @@
 [GOOD] (define-fun s34 () (_ BitVec 16) ((_ rotate_right 15) s0))
 [GOOD] (define-fun s36 () (_ BitVec 16) (ite (bvule #x10 s3) s35 (table0 s3)))
 [GOOD] (define-fun s37 () Bool (= s20 s36))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
 [GOOD] (assert (= (table0 #x00) s0))
 [GOOD] (assert (= (table0 #x01) s13))
 [GOOD] (assert (= (table0 #x02) s21))
@@ -71,6 +76,7 @@
 [GOOD] (assert (= (table0 #x0d) s32))
 [GOOD] (assert (= (table0 #x0e) s33))
 [GOOD] (assert (= (table0 #x0f) s34))
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert (not s37))
 [SEND] (check-sat)
 [RECV] unsat
diff --git a/SBVTestSuite/GoldFiles/barrelRotate_Right_Int32_Word16.gold b/SBVTestSuite/GoldFiles/barrelRotate_Right_Int32_Word16.gold
--- a/SBVTestSuite/GoldFiles/barrelRotate_Right_Int32_Word16.gold
+++ b/SBVTestSuite/GoldFiles/barrelRotate_Right_Int32_Word16.gold
@@ -21,7 +21,7 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s3 () (_ BitVec 16) (bvurem s1 s2))
 [GOOD] (define-fun s4 () (_ BitVec 1) ((_ extract 4 4) s3))
 [GOOD] (define-fun s6 () Bool (distinct s4 s5))
@@ -75,6 +75,11 @@
 [GOOD] (define-fun s54 () (_ BitVec 32) ((_ rotate_right 31) s0))
 [GOOD] (define-fun s56 () (_ BitVec 32) (ite (bvule #x0020 s3) s55 (table0 s3)))
 [GOOD] (define-fun s57 () Bool (= s24 s56))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
 [GOOD] (assert (= (table0 #x0000) s0))
 [GOOD] (assert (= (table0 #x0001) s15))
 [GOOD] (assert (= (table0 #x0002) s25))
@@ -107,6 +112,7 @@
 [GOOD] (assert (= (table0 #x001d) s52))
 [GOOD] (assert (= (table0 #x001e) s53))
 [GOOD] (assert (= (table0 #x001f) s54))
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert (not s57))
 [SEND] (check-sat)
 [RECV] unsat
diff --git a/SBVTestSuite/GoldFiles/barrelRotate_Right_Int32_Word32.gold b/SBVTestSuite/GoldFiles/barrelRotate_Right_Int32_Word32.gold
--- a/SBVTestSuite/GoldFiles/barrelRotate_Right_Int32_Word32.gold
+++ b/SBVTestSuite/GoldFiles/barrelRotate_Right_Int32_Word32.gold
@@ -21,7 +21,7 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s3 () (_ BitVec 32) (bvurem s1 s2))
 [GOOD] (define-fun s4 () (_ BitVec 1) ((_ extract 4 4) s3))
 [GOOD] (define-fun s6 () Bool (distinct s4 s5))
@@ -75,6 +75,11 @@
 [GOOD] (define-fun s54 () (_ BitVec 32) ((_ rotate_right 31) s0))
 [GOOD] (define-fun s56 () (_ BitVec 32) (ite (bvule #x00000020 s3) s55 (table0 s3)))
 [GOOD] (define-fun s57 () Bool (= s24 s56))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
 [GOOD] (assert (= (table0 #x00000000) s0))
 [GOOD] (assert (= (table0 #x00000001) s15))
 [GOOD] (assert (= (table0 #x00000002) s25))
@@ -107,6 +112,7 @@
 [GOOD] (assert (= (table0 #x0000001d) s52))
 [GOOD] (assert (= (table0 #x0000001e) s53))
 [GOOD] (assert (= (table0 #x0000001f) s54))
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert (not s57))
 [SEND] (check-sat)
 [RECV] unsat
diff --git a/SBVTestSuite/GoldFiles/barrelRotate_Right_Int32_Word64.gold b/SBVTestSuite/GoldFiles/barrelRotate_Right_Int32_Word64.gold
--- a/SBVTestSuite/GoldFiles/barrelRotate_Right_Int32_Word64.gold
+++ b/SBVTestSuite/GoldFiles/barrelRotate_Right_Int32_Word64.gold
@@ -21,7 +21,7 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s3 () (_ BitVec 64) (bvurem s1 s2))
 [GOOD] (define-fun s4 () (_ BitVec 1) ((_ extract 4 4) s3))
 [GOOD] (define-fun s6 () Bool (distinct s4 s5))
@@ -75,6 +75,11 @@
 [GOOD] (define-fun s54 () (_ BitVec 32) ((_ rotate_right 31) s0))
 [GOOD] (define-fun s56 () (_ BitVec 32) (ite (bvule #x0000000000000020 s3) s55 (table0 s3)))
 [GOOD] (define-fun s57 () Bool (= s24 s56))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
 [GOOD] (assert (= (table0 #x0000000000000000) s0))
 [GOOD] (assert (= (table0 #x0000000000000001) s15))
 [GOOD] (assert (= (table0 #x0000000000000002) s25))
@@ -107,6 +112,7 @@
 [GOOD] (assert (= (table0 #x000000000000001d) s52))
 [GOOD] (assert (= (table0 #x000000000000001e) s53))
 [GOOD] (assert (= (table0 #x000000000000001f) s54))
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert (not s57))
 [SEND] (check-sat)
 [RECV] unsat
diff --git a/SBVTestSuite/GoldFiles/barrelRotate_Right_Int32_Word8.gold b/SBVTestSuite/GoldFiles/barrelRotate_Right_Int32_Word8.gold
--- a/SBVTestSuite/GoldFiles/barrelRotate_Right_Int32_Word8.gold
+++ b/SBVTestSuite/GoldFiles/barrelRotate_Right_Int32_Word8.gold
@@ -21,7 +21,7 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s3 () (_ BitVec 8) (bvurem s1 s2))
 [GOOD] (define-fun s4 () (_ BitVec 1) ((_ extract 4 4) s3))
 [GOOD] (define-fun s6 () Bool (distinct s4 s5))
@@ -75,6 +75,11 @@
 [GOOD] (define-fun s54 () (_ BitVec 32) ((_ rotate_right 31) s0))
 [GOOD] (define-fun s56 () (_ BitVec 32) (ite (bvule #x20 s3) s55 (table0 s3)))
 [GOOD] (define-fun s57 () Bool (= s24 s56))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
 [GOOD] (assert (= (table0 #x00) s0))
 [GOOD] (assert (= (table0 #x01) s15))
 [GOOD] (assert (= (table0 #x02) s25))
@@ -107,6 +112,7 @@
 [GOOD] (assert (= (table0 #x1d) s52))
 [GOOD] (assert (= (table0 #x1e) s53))
 [GOOD] (assert (= (table0 #x1f) s54))
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert (not s57))
 [SEND] (check-sat)
 [RECV] unsat
diff --git a/SBVTestSuite/GoldFiles/barrelRotate_Right_Int64_Word16.gold b/SBVTestSuite/GoldFiles/barrelRotate_Right_Int64_Word16.gold
--- a/SBVTestSuite/GoldFiles/barrelRotate_Right_Int64_Word16.gold
+++ b/SBVTestSuite/GoldFiles/barrelRotate_Right_Int64_Word16.gold
@@ -21,7 +21,7 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s3 () (_ BitVec 16) (bvurem s1 s2))
 [GOOD] (define-fun s4 () (_ BitVec 1) ((_ extract 5 5) s3))
 [GOOD] (define-fun s6 () Bool (distinct s4 s5))
@@ -111,6 +111,11 @@
 [GOOD] (define-fun s90 () (_ BitVec 64) ((_ rotate_right 63) s0))
 [GOOD] (define-fun s92 () (_ BitVec 64) (ite (bvule #x0040 s3) s91 (table0 s3)))
 [GOOD] (define-fun s93 () Bool (= s28 s92))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
 [GOOD] (assert (= (table0 #x0000) s0))
 [GOOD] (assert (= (table0 #x0001) s17))
 [GOOD] (assert (= (table0 #x0002) s29))
@@ -175,6 +180,7 @@
 [GOOD] (assert (= (table0 #x003d) s88))
 [GOOD] (assert (= (table0 #x003e) s89))
 [GOOD] (assert (= (table0 #x003f) s90))
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert (not s93))
 [SEND] (check-sat)
 [RECV] unsat
diff --git a/SBVTestSuite/GoldFiles/barrelRotate_Right_Int64_Word32.gold b/SBVTestSuite/GoldFiles/barrelRotate_Right_Int64_Word32.gold
--- a/SBVTestSuite/GoldFiles/barrelRotate_Right_Int64_Word32.gold
+++ b/SBVTestSuite/GoldFiles/barrelRotate_Right_Int64_Word32.gold
@@ -21,7 +21,7 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s3 () (_ BitVec 32) (bvurem s1 s2))
 [GOOD] (define-fun s4 () (_ BitVec 1) ((_ extract 5 5) s3))
 [GOOD] (define-fun s6 () Bool (distinct s4 s5))
@@ -111,6 +111,11 @@
 [GOOD] (define-fun s90 () (_ BitVec 64) ((_ rotate_right 63) s0))
 [GOOD] (define-fun s92 () (_ BitVec 64) (ite (bvule #x00000040 s3) s91 (table0 s3)))
 [GOOD] (define-fun s93 () Bool (= s28 s92))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
 [GOOD] (assert (= (table0 #x00000000) s0))
 [GOOD] (assert (= (table0 #x00000001) s17))
 [GOOD] (assert (= (table0 #x00000002) s29))
@@ -175,6 +180,7 @@
 [GOOD] (assert (= (table0 #x0000003d) s88))
 [GOOD] (assert (= (table0 #x0000003e) s89))
 [GOOD] (assert (= (table0 #x0000003f) s90))
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert (not s93))
 [SEND] (check-sat)
 [RECV] unsat
diff --git a/SBVTestSuite/GoldFiles/barrelRotate_Right_Int64_Word64.gold b/SBVTestSuite/GoldFiles/barrelRotate_Right_Int64_Word64.gold
--- a/SBVTestSuite/GoldFiles/barrelRotate_Right_Int64_Word64.gold
+++ b/SBVTestSuite/GoldFiles/barrelRotate_Right_Int64_Word64.gold
@@ -21,7 +21,7 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s3 () (_ BitVec 64) (bvurem s1 s2))
 [GOOD] (define-fun s4 () (_ BitVec 1) ((_ extract 5 5) s3))
 [GOOD] (define-fun s6 () Bool (distinct s4 s5))
@@ -111,6 +111,11 @@
 [GOOD] (define-fun s90 () (_ BitVec 64) ((_ rotate_right 63) s0))
 [GOOD] (define-fun s92 () (_ BitVec 64) (ite (bvule #x0000000000000040 s3) s91 (table0 s3)))
 [GOOD] (define-fun s93 () Bool (= s28 s92))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
 [GOOD] (assert (= (table0 #x0000000000000000) s0))
 [GOOD] (assert (= (table0 #x0000000000000001) s17))
 [GOOD] (assert (= (table0 #x0000000000000002) s29))
@@ -175,6 +180,7 @@
 [GOOD] (assert (= (table0 #x000000000000003d) s88))
 [GOOD] (assert (= (table0 #x000000000000003e) s89))
 [GOOD] (assert (= (table0 #x000000000000003f) s90))
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert (not s93))
 [SEND] (check-sat)
 [RECV] unsat
diff --git a/SBVTestSuite/GoldFiles/barrelRotate_Right_Int64_Word8.gold b/SBVTestSuite/GoldFiles/barrelRotate_Right_Int64_Word8.gold
--- a/SBVTestSuite/GoldFiles/barrelRotate_Right_Int64_Word8.gold
+++ b/SBVTestSuite/GoldFiles/barrelRotate_Right_Int64_Word8.gold
@@ -21,7 +21,7 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s3 () (_ BitVec 8) (bvurem s1 s2))
 [GOOD] (define-fun s4 () (_ BitVec 1) ((_ extract 5 5) s3))
 [GOOD] (define-fun s6 () Bool (distinct s4 s5))
@@ -111,6 +111,11 @@
 [GOOD] (define-fun s90 () (_ BitVec 64) ((_ rotate_right 63) s0))
 [GOOD] (define-fun s92 () (_ BitVec 64) (ite (bvule #x40 s3) s91 (table0 s3)))
 [GOOD] (define-fun s93 () Bool (= s28 s92))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
 [GOOD] (assert (= (table0 #x00) s0))
 [GOOD] (assert (= (table0 #x01) s17))
 [GOOD] (assert (= (table0 #x02) s29))
@@ -175,6 +180,7 @@
 [GOOD] (assert (= (table0 #x3d) s88))
 [GOOD] (assert (= (table0 #x3e) s89))
 [GOOD] (assert (= (table0 #x3f) s90))
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert (not s93))
 [SEND] (check-sat)
 [RECV] unsat
diff --git a/SBVTestSuite/GoldFiles/barrelRotate_Right_Int8_Word16.gold b/SBVTestSuite/GoldFiles/barrelRotate_Right_Int8_Word16.gold
--- a/SBVTestSuite/GoldFiles/barrelRotate_Right_Int8_Word16.gold
+++ b/SBVTestSuite/GoldFiles/barrelRotate_Right_Int8_Word16.gold
@@ -21,7 +21,7 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s3 () (_ BitVec 16) (bvurem s1 s2))
 [GOOD] (define-fun s4 () (_ BitVec 1) ((_ extract 2 2) s3))
 [GOOD] (define-fun s6 () Bool (distinct s4 s5))
@@ -43,6 +43,11 @@
 [GOOD] (define-fun s22 () (_ BitVec 8) ((_ rotate_right 7) s0))
 [GOOD] (define-fun s24 () (_ BitVec 8) (ite (bvule #x0008 s3) s23 (table0 s3)))
 [GOOD] (define-fun s25 () Bool (= s16 s24))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
 [GOOD] (assert (= (table0 #x0000) s0))
 [GOOD] (assert (= (table0 #x0001) s11))
 [GOOD] (assert (= (table0 #x0002) s17))
@@ -51,6 +56,7 @@
 [GOOD] (assert (= (table0 #x0005) s20))
 [GOOD] (assert (= (table0 #x0006) s21))
 [GOOD] (assert (= (table0 #x0007) s22))
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert (not s25))
 [SEND] (check-sat)
 [RECV] unsat
diff --git a/SBVTestSuite/GoldFiles/barrelRotate_Right_Int8_Word32.gold b/SBVTestSuite/GoldFiles/barrelRotate_Right_Int8_Word32.gold
--- a/SBVTestSuite/GoldFiles/barrelRotate_Right_Int8_Word32.gold
+++ b/SBVTestSuite/GoldFiles/barrelRotate_Right_Int8_Word32.gold
@@ -21,7 +21,7 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s3 () (_ BitVec 32) (bvurem s1 s2))
 [GOOD] (define-fun s4 () (_ BitVec 1) ((_ extract 2 2) s3))
 [GOOD] (define-fun s6 () Bool (distinct s4 s5))
@@ -43,6 +43,11 @@
 [GOOD] (define-fun s22 () (_ BitVec 8) ((_ rotate_right 7) s0))
 [GOOD] (define-fun s24 () (_ BitVec 8) (ite (bvule #x00000008 s3) s23 (table0 s3)))
 [GOOD] (define-fun s25 () Bool (= s16 s24))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
 [GOOD] (assert (= (table0 #x00000000) s0))
 [GOOD] (assert (= (table0 #x00000001) s11))
 [GOOD] (assert (= (table0 #x00000002) s17))
@@ -51,6 +56,7 @@
 [GOOD] (assert (= (table0 #x00000005) s20))
 [GOOD] (assert (= (table0 #x00000006) s21))
 [GOOD] (assert (= (table0 #x00000007) s22))
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert (not s25))
 [SEND] (check-sat)
 [RECV] unsat
diff --git a/SBVTestSuite/GoldFiles/barrelRotate_Right_Int8_Word64.gold b/SBVTestSuite/GoldFiles/barrelRotate_Right_Int8_Word64.gold
--- a/SBVTestSuite/GoldFiles/barrelRotate_Right_Int8_Word64.gold
+++ b/SBVTestSuite/GoldFiles/barrelRotate_Right_Int8_Word64.gold
@@ -21,7 +21,7 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s3 () (_ BitVec 64) (bvurem s1 s2))
 [GOOD] (define-fun s4 () (_ BitVec 1) ((_ extract 2 2) s3))
 [GOOD] (define-fun s6 () Bool (distinct s4 s5))
@@ -43,6 +43,11 @@
 [GOOD] (define-fun s22 () (_ BitVec 8) ((_ rotate_right 7) s0))
 [GOOD] (define-fun s24 () (_ BitVec 8) (ite (bvule #x0000000000000008 s3) s23 (table0 s3)))
 [GOOD] (define-fun s25 () Bool (= s16 s24))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
 [GOOD] (assert (= (table0 #x0000000000000000) s0))
 [GOOD] (assert (= (table0 #x0000000000000001) s11))
 [GOOD] (assert (= (table0 #x0000000000000002) s17))
@@ -51,6 +56,7 @@
 [GOOD] (assert (= (table0 #x0000000000000005) s20))
 [GOOD] (assert (= (table0 #x0000000000000006) s21))
 [GOOD] (assert (= (table0 #x0000000000000007) s22))
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert (not s25))
 [SEND] (check-sat)
 [RECV] unsat
diff --git a/SBVTestSuite/GoldFiles/barrelRotate_Right_Int8_Word8.gold b/SBVTestSuite/GoldFiles/barrelRotate_Right_Int8_Word8.gold
--- a/SBVTestSuite/GoldFiles/barrelRotate_Right_Int8_Word8.gold
+++ b/SBVTestSuite/GoldFiles/barrelRotate_Right_Int8_Word8.gold
@@ -21,7 +21,7 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s3 () (_ BitVec 8) (bvurem s1 s2))
 [GOOD] (define-fun s4 () (_ BitVec 1) ((_ extract 2 2) s3))
 [GOOD] (define-fun s6 () Bool (distinct s4 s5))
@@ -43,6 +43,11 @@
 [GOOD] (define-fun s22 () (_ BitVec 8) ((_ rotate_right 7) s0))
 [GOOD] (define-fun s24 () (_ BitVec 8) (ite (bvule #x08 s3) s23 (table0 s3)))
 [GOOD] (define-fun s25 () Bool (= s16 s24))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
 [GOOD] (assert (= (table0 #x00) s0))
 [GOOD] (assert (= (table0 #x01) s11))
 [GOOD] (assert (= (table0 #x02) s17))
@@ -51,6 +56,7 @@
 [GOOD] (assert (= (table0 #x05) s20))
 [GOOD] (assert (= (table0 #x06) s21))
 [GOOD] (assert (= (table0 #x07) s22))
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert (not s25))
 [SEND] (check-sat)
 [RECV] unsat
diff --git a/SBVTestSuite/GoldFiles/barrelRotate_Right_Word16_Word16.gold b/SBVTestSuite/GoldFiles/barrelRotate_Right_Word16_Word16.gold
--- a/SBVTestSuite/GoldFiles/barrelRotate_Right_Word16_Word16.gold
+++ b/SBVTestSuite/GoldFiles/barrelRotate_Right_Word16_Word16.gold
@@ -21,7 +21,7 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s3 () (_ BitVec 16) (bvurem s1 s2))
 [GOOD] (define-fun s4 () (_ BitVec 1) ((_ extract 3 3) s3))
 [GOOD] (define-fun s6 () Bool (distinct s4 s5))
@@ -55,6 +55,11 @@
 [GOOD] (define-fun s34 () (_ BitVec 16) ((_ rotate_right 15) s0))
 [GOOD] (define-fun s36 () (_ BitVec 16) (ite (bvule #x0010 s3) s35 (table0 s3)))
 [GOOD] (define-fun s37 () Bool (= s20 s36))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
 [GOOD] (assert (= (table0 #x0000) s0))
 [GOOD] (assert (= (table0 #x0001) s13))
 [GOOD] (assert (= (table0 #x0002) s21))
@@ -71,6 +76,7 @@
 [GOOD] (assert (= (table0 #x000d) s32))
 [GOOD] (assert (= (table0 #x000e) s33))
 [GOOD] (assert (= (table0 #x000f) s34))
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert (not s37))
 [SEND] (check-sat)
 [RECV] unsat
diff --git a/SBVTestSuite/GoldFiles/barrelRotate_Right_Word16_Word32.gold b/SBVTestSuite/GoldFiles/barrelRotate_Right_Word16_Word32.gold
--- a/SBVTestSuite/GoldFiles/barrelRotate_Right_Word16_Word32.gold
+++ b/SBVTestSuite/GoldFiles/barrelRotate_Right_Word16_Word32.gold
@@ -21,7 +21,7 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s3 () (_ BitVec 32) (bvurem s1 s2))
 [GOOD] (define-fun s4 () (_ BitVec 1) ((_ extract 3 3) s3))
 [GOOD] (define-fun s6 () Bool (distinct s4 s5))
@@ -55,6 +55,11 @@
 [GOOD] (define-fun s34 () (_ BitVec 16) ((_ rotate_right 15) s0))
 [GOOD] (define-fun s36 () (_ BitVec 16) (ite (bvule #x00000010 s3) s35 (table0 s3)))
 [GOOD] (define-fun s37 () Bool (= s20 s36))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
 [GOOD] (assert (= (table0 #x00000000) s0))
 [GOOD] (assert (= (table0 #x00000001) s13))
 [GOOD] (assert (= (table0 #x00000002) s21))
@@ -71,6 +76,7 @@
 [GOOD] (assert (= (table0 #x0000000d) s32))
 [GOOD] (assert (= (table0 #x0000000e) s33))
 [GOOD] (assert (= (table0 #x0000000f) s34))
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert (not s37))
 [SEND] (check-sat)
 [RECV] unsat
diff --git a/SBVTestSuite/GoldFiles/barrelRotate_Right_Word16_Word64.gold b/SBVTestSuite/GoldFiles/barrelRotate_Right_Word16_Word64.gold
--- a/SBVTestSuite/GoldFiles/barrelRotate_Right_Word16_Word64.gold
+++ b/SBVTestSuite/GoldFiles/barrelRotate_Right_Word16_Word64.gold
@@ -21,7 +21,7 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s3 () (_ BitVec 64) (bvurem s1 s2))
 [GOOD] (define-fun s4 () (_ BitVec 1) ((_ extract 3 3) s3))
 [GOOD] (define-fun s6 () Bool (distinct s4 s5))
@@ -55,6 +55,11 @@
 [GOOD] (define-fun s34 () (_ BitVec 16) ((_ rotate_right 15) s0))
 [GOOD] (define-fun s36 () (_ BitVec 16) (ite (bvule #x0000000000000010 s3) s35 (table0 s3)))
 [GOOD] (define-fun s37 () Bool (= s20 s36))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
 [GOOD] (assert (= (table0 #x0000000000000000) s0))
 [GOOD] (assert (= (table0 #x0000000000000001) s13))
 [GOOD] (assert (= (table0 #x0000000000000002) s21))
@@ -71,6 +76,7 @@
 [GOOD] (assert (= (table0 #x000000000000000d) s32))
 [GOOD] (assert (= (table0 #x000000000000000e) s33))
 [GOOD] (assert (= (table0 #x000000000000000f) s34))
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert (not s37))
 [SEND] (check-sat)
 [RECV] unsat
diff --git a/SBVTestSuite/GoldFiles/barrelRotate_Right_Word16_Word8.gold b/SBVTestSuite/GoldFiles/barrelRotate_Right_Word16_Word8.gold
--- a/SBVTestSuite/GoldFiles/barrelRotate_Right_Word16_Word8.gold
+++ b/SBVTestSuite/GoldFiles/barrelRotate_Right_Word16_Word8.gold
@@ -21,7 +21,7 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s3 () (_ BitVec 8) (bvurem s1 s2))
 [GOOD] (define-fun s4 () (_ BitVec 1) ((_ extract 3 3) s3))
 [GOOD] (define-fun s6 () Bool (distinct s4 s5))
@@ -55,6 +55,11 @@
 [GOOD] (define-fun s34 () (_ BitVec 16) ((_ rotate_right 15) s0))
 [GOOD] (define-fun s36 () (_ BitVec 16) (ite (bvule #x10 s3) s35 (table0 s3)))
 [GOOD] (define-fun s37 () Bool (= s20 s36))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
 [GOOD] (assert (= (table0 #x00) s0))
 [GOOD] (assert (= (table0 #x01) s13))
 [GOOD] (assert (= (table0 #x02) s21))
@@ -71,6 +76,7 @@
 [GOOD] (assert (= (table0 #x0d) s32))
 [GOOD] (assert (= (table0 #x0e) s33))
 [GOOD] (assert (= (table0 #x0f) s34))
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert (not s37))
 [SEND] (check-sat)
 [RECV] unsat
diff --git a/SBVTestSuite/GoldFiles/barrelRotate_Right_Word32_Word16.gold b/SBVTestSuite/GoldFiles/barrelRotate_Right_Word32_Word16.gold
--- a/SBVTestSuite/GoldFiles/barrelRotate_Right_Word32_Word16.gold
+++ b/SBVTestSuite/GoldFiles/barrelRotate_Right_Word32_Word16.gold
@@ -21,7 +21,7 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s3 () (_ BitVec 16) (bvurem s1 s2))
 [GOOD] (define-fun s4 () (_ BitVec 1) ((_ extract 4 4) s3))
 [GOOD] (define-fun s6 () Bool (distinct s4 s5))
@@ -75,6 +75,11 @@
 [GOOD] (define-fun s54 () (_ BitVec 32) ((_ rotate_right 31) s0))
 [GOOD] (define-fun s56 () (_ BitVec 32) (ite (bvule #x0020 s3) s55 (table0 s3)))
 [GOOD] (define-fun s57 () Bool (= s24 s56))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
 [GOOD] (assert (= (table0 #x0000) s0))
 [GOOD] (assert (= (table0 #x0001) s15))
 [GOOD] (assert (= (table0 #x0002) s25))
@@ -107,6 +112,7 @@
 [GOOD] (assert (= (table0 #x001d) s52))
 [GOOD] (assert (= (table0 #x001e) s53))
 [GOOD] (assert (= (table0 #x001f) s54))
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert (not s57))
 [SEND] (check-sat)
 [RECV] unsat
diff --git a/SBVTestSuite/GoldFiles/barrelRotate_Right_Word32_Word32.gold b/SBVTestSuite/GoldFiles/barrelRotate_Right_Word32_Word32.gold
--- a/SBVTestSuite/GoldFiles/barrelRotate_Right_Word32_Word32.gold
+++ b/SBVTestSuite/GoldFiles/barrelRotate_Right_Word32_Word32.gold
@@ -21,7 +21,7 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s3 () (_ BitVec 32) (bvurem s1 s2))
 [GOOD] (define-fun s4 () (_ BitVec 1) ((_ extract 4 4) s3))
 [GOOD] (define-fun s6 () Bool (distinct s4 s5))
@@ -75,6 +75,11 @@
 [GOOD] (define-fun s54 () (_ BitVec 32) ((_ rotate_right 31) s0))
 [GOOD] (define-fun s56 () (_ BitVec 32) (ite (bvule #x00000020 s3) s55 (table0 s3)))
 [GOOD] (define-fun s57 () Bool (= s24 s56))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
 [GOOD] (assert (= (table0 #x00000000) s0))
 [GOOD] (assert (= (table0 #x00000001) s15))
 [GOOD] (assert (= (table0 #x00000002) s25))
@@ -107,6 +112,7 @@
 [GOOD] (assert (= (table0 #x0000001d) s52))
 [GOOD] (assert (= (table0 #x0000001e) s53))
 [GOOD] (assert (= (table0 #x0000001f) s54))
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert (not s57))
 [SEND] (check-sat)
 [RECV] unsat
diff --git a/SBVTestSuite/GoldFiles/barrelRotate_Right_Word32_Word64.gold b/SBVTestSuite/GoldFiles/barrelRotate_Right_Word32_Word64.gold
--- a/SBVTestSuite/GoldFiles/barrelRotate_Right_Word32_Word64.gold
+++ b/SBVTestSuite/GoldFiles/barrelRotate_Right_Word32_Word64.gold
@@ -21,7 +21,7 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s3 () (_ BitVec 64) (bvurem s1 s2))
 [GOOD] (define-fun s4 () (_ BitVec 1) ((_ extract 4 4) s3))
 [GOOD] (define-fun s6 () Bool (distinct s4 s5))
@@ -75,6 +75,11 @@
 [GOOD] (define-fun s54 () (_ BitVec 32) ((_ rotate_right 31) s0))
 [GOOD] (define-fun s56 () (_ BitVec 32) (ite (bvule #x0000000000000020 s3) s55 (table0 s3)))
 [GOOD] (define-fun s57 () Bool (= s24 s56))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
 [GOOD] (assert (= (table0 #x0000000000000000) s0))
 [GOOD] (assert (= (table0 #x0000000000000001) s15))
 [GOOD] (assert (= (table0 #x0000000000000002) s25))
@@ -107,6 +112,7 @@
 [GOOD] (assert (= (table0 #x000000000000001d) s52))
 [GOOD] (assert (= (table0 #x000000000000001e) s53))
 [GOOD] (assert (= (table0 #x000000000000001f) s54))
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert (not s57))
 [SEND] (check-sat)
 [RECV] unsat
diff --git a/SBVTestSuite/GoldFiles/barrelRotate_Right_Word32_Word8.gold b/SBVTestSuite/GoldFiles/barrelRotate_Right_Word32_Word8.gold
--- a/SBVTestSuite/GoldFiles/barrelRotate_Right_Word32_Word8.gold
+++ b/SBVTestSuite/GoldFiles/barrelRotate_Right_Word32_Word8.gold
@@ -21,7 +21,7 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s3 () (_ BitVec 8) (bvurem s1 s2))
 [GOOD] (define-fun s4 () (_ BitVec 1) ((_ extract 4 4) s3))
 [GOOD] (define-fun s6 () Bool (distinct s4 s5))
@@ -75,6 +75,11 @@
 [GOOD] (define-fun s54 () (_ BitVec 32) ((_ rotate_right 31) s0))
 [GOOD] (define-fun s56 () (_ BitVec 32) (ite (bvule #x20 s3) s55 (table0 s3)))
 [GOOD] (define-fun s57 () Bool (= s24 s56))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
 [GOOD] (assert (= (table0 #x00) s0))
 [GOOD] (assert (= (table0 #x01) s15))
 [GOOD] (assert (= (table0 #x02) s25))
@@ -107,6 +112,7 @@
 [GOOD] (assert (= (table0 #x1d) s52))
 [GOOD] (assert (= (table0 #x1e) s53))
 [GOOD] (assert (= (table0 #x1f) s54))
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert (not s57))
 [SEND] (check-sat)
 [RECV] unsat
diff --git a/SBVTestSuite/GoldFiles/barrelRotate_Right_Word64_Word16.gold b/SBVTestSuite/GoldFiles/barrelRotate_Right_Word64_Word16.gold
--- a/SBVTestSuite/GoldFiles/barrelRotate_Right_Word64_Word16.gold
+++ b/SBVTestSuite/GoldFiles/barrelRotate_Right_Word64_Word16.gold
@@ -21,7 +21,7 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s3 () (_ BitVec 16) (bvurem s1 s2))
 [GOOD] (define-fun s4 () (_ BitVec 1) ((_ extract 5 5) s3))
 [GOOD] (define-fun s6 () Bool (distinct s4 s5))
@@ -111,6 +111,11 @@
 [GOOD] (define-fun s90 () (_ BitVec 64) ((_ rotate_right 63) s0))
 [GOOD] (define-fun s92 () (_ BitVec 64) (ite (bvule #x0040 s3) s91 (table0 s3)))
 [GOOD] (define-fun s93 () Bool (= s28 s92))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
 [GOOD] (assert (= (table0 #x0000) s0))
 [GOOD] (assert (= (table0 #x0001) s17))
 [GOOD] (assert (= (table0 #x0002) s29))
@@ -175,6 +180,7 @@
 [GOOD] (assert (= (table0 #x003d) s88))
 [GOOD] (assert (= (table0 #x003e) s89))
 [GOOD] (assert (= (table0 #x003f) s90))
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert (not s93))
 [SEND] (check-sat)
 [RECV] unsat
diff --git a/SBVTestSuite/GoldFiles/barrelRotate_Right_Word64_Word32.gold b/SBVTestSuite/GoldFiles/barrelRotate_Right_Word64_Word32.gold
--- a/SBVTestSuite/GoldFiles/barrelRotate_Right_Word64_Word32.gold
+++ b/SBVTestSuite/GoldFiles/barrelRotate_Right_Word64_Word32.gold
@@ -21,7 +21,7 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s3 () (_ BitVec 32) (bvurem s1 s2))
 [GOOD] (define-fun s4 () (_ BitVec 1) ((_ extract 5 5) s3))
 [GOOD] (define-fun s6 () Bool (distinct s4 s5))
@@ -111,6 +111,11 @@
 [GOOD] (define-fun s90 () (_ BitVec 64) ((_ rotate_right 63) s0))
 [GOOD] (define-fun s92 () (_ BitVec 64) (ite (bvule #x00000040 s3) s91 (table0 s3)))
 [GOOD] (define-fun s93 () Bool (= s28 s92))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
 [GOOD] (assert (= (table0 #x00000000) s0))
 [GOOD] (assert (= (table0 #x00000001) s17))
 [GOOD] (assert (= (table0 #x00000002) s29))
@@ -175,6 +180,7 @@
 [GOOD] (assert (= (table0 #x0000003d) s88))
 [GOOD] (assert (= (table0 #x0000003e) s89))
 [GOOD] (assert (= (table0 #x0000003f) s90))
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert (not s93))
 [SEND] (check-sat)
 [RECV] unsat
diff --git a/SBVTestSuite/GoldFiles/barrelRotate_Right_Word64_Word64.gold b/SBVTestSuite/GoldFiles/barrelRotate_Right_Word64_Word64.gold
--- a/SBVTestSuite/GoldFiles/barrelRotate_Right_Word64_Word64.gold
+++ b/SBVTestSuite/GoldFiles/barrelRotate_Right_Word64_Word64.gold
@@ -21,7 +21,7 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s3 () (_ BitVec 64) (bvurem s1 s2))
 [GOOD] (define-fun s4 () (_ BitVec 1) ((_ extract 5 5) s3))
 [GOOD] (define-fun s6 () Bool (distinct s4 s5))
@@ -111,6 +111,11 @@
 [GOOD] (define-fun s90 () (_ BitVec 64) ((_ rotate_right 63) s0))
 [GOOD] (define-fun s92 () (_ BitVec 64) (ite (bvule #x0000000000000040 s3) s91 (table0 s3)))
 [GOOD] (define-fun s93 () Bool (= s28 s92))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
 [GOOD] (assert (= (table0 #x0000000000000000) s0))
 [GOOD] (assert (= (table0 #x0000000000000001) s17))
 [GOOD] (assert (= (table0 #x0000000000000002) s29))
@@ -175,6 +180,7 @@
 [GOOD] (assert (= (table0 #x000000000000003d) s88))
 [GOOD] (assert (= (table0 #x000000000000003e) s89))
 [GOOD] (assert (= (table0 #x000000000000003f) s90))
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert (not s93))
 [SEND] (check-sat)
 [RECV] unsat
diff --git a/SBVTestSuite/GoldFiles/barrelRotate_Right_Word64_Word8.gold b/SBVTestSuite/GoldFiles/barrelRotate_Right_Word64_Word8.gold
--- a/SBVTestSuite/GoldFiles/barrelRotate_Right_Word64_Word8.gold
+++ b/SBVTestSuite/GoldFiles/barrelRotate_Right_Word64_Word8.gold
@@ -21,7 +21,7 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s3 () (_ BitVec 8) (bvurem s1 s2))
 [GOOD] (define-fun s4 () (_ BitVec 1) ((_ extract 5 5) s3))
 [GOOD] (define-fun s6 () Bool (distinct s4 s5))
@@ -111,6 +111,11 @@
 [GOOD] (define-fun s90 () (_ BitVec 64) ((_ rotate_right 63) s0))
 [GOOD] (define-fun s92 () (_ BitVec 64) (ite (bvule #x40 s3) s91 (table0 s3)))
 [GOOD] (define-fun s93 () Bool (= s28 s92))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
 [GOOD] (assert (= (table0 #x00) s0))
 [GOOD] (assert (= (table0 #x01) s17))
 [GOOD] (assert (= (table0 #x02) s29))
@@ -175,6 +180,7 @@
 [GOOD] (assert (= (table0 #x3d) s88))
 [GOOD] (assert (= (table0 #x3e) s89))
 [GOOD] (assert (= (table0 #x3f) s90))
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert (not s93))
 [SEND] (check-sat)
 [RECV] unsat
diff --git a/SBVTestSuite/GoldFiles/barrelRotate_Right_Word8_Word16.gold b/SBVTestSuite/GoldFiles/barrelRotate_Right_Word8_Word16.gold
--- a/SBVTestSuite/GoldFiles/barrelRotate_Right_Word8_Word16.gold
+++ b/SBVTestSuite/GoldFiles/barrelRotate_Right_Word8_Word16.gold
@@ -21,7 +21,7 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s3 () (_ BitVec 16) (bvurem s1 s2))
 [GOOD] (define-fun s4 () (_ BitVec 1) ((_ extract 2 2) s3))
 [GOOD] (define-fun s6 () Bool (distinct s4 s5))
@@ -43,6 +43,11 @@
 [GOOD] (define-fun s22 () (_ BitVec 8) ((_ rotate_right 7) s0))
 [GOOD] (define-fun s24 () (_ BitVec 8) (ite (bvule #x0008 s3) s23 (table0 s3)))
 [GOOD] (define-fun s25 () Bool (= s16 s24))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
 [GOOD] (assert (= (table0 #x0000) s0))
 [GOOD] (assert (= (table0 #x0001) s11))
 [GOOD] (assert (= (table0 #x0002) s17))
@@ -51,6 +56,7 @@
 [GOOD] (assert (= (table0 #x0005) s20))
 [GOOD] (assert (= (table0 #x0006) s21))
 [GOOD] (assert (= (table0 #x0007) s22))
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert (not s25))
 [SEND] (check-sat)
 [RECV] unsat
diff --git a/SBVTestSuite/GoldFiles/barrelRotate_Right_Word8_Word32.gold b/SBVTestSuite/GoldFiles/barrelRotate_Right_Word8_Word32.gold
--- a/SBVTestSuite/GoldFiles/barrelRotate_Right_Word8_Word32.gold
+++ b/SBVTestSuite/GoldFiles/barrelRotate_Right_Word8_Word32.gold
@@ -21,7 +21,7 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s3 () (_ BitVec 32) (bvurem s1 s2))
 [GOOD] (define-fun s4 () (_ BitVec 1) ((_ extract 2 2) s3))
 [GOOD] (define-fun s6 () Bool (distinct s4 s5))
@@ -43,6 +43,11 @@
 [GOOD] (define-fun s22 () (_ BitVec 8) ((_ rotate_right 7) s0))
 [GOOD] (define-fun s24 () (_ BitVec 8) (ite (bvule #x00000008 s3) s23 (table0 s3)))
 [GOOD] (define-fun s25 () Bool (= s16 s24))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
 [GOOD] (assert (= (table0 #x00000000) s0))
 [GOOD] (assert (= (table0 #x00000001) s11))
 [GOOD] (assert (= (table0 #x00000002) s17))
@@ -51,6 +56,7 @@
 [GOOD] (assert (= (table0 #x00000005) s20))
 [GOOD] (assert (= (table0 #x00000006) s21))
 [GOOD] (assert (= (table0 #x00000007) s22))
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert (not s25))
 [SEND] (check-sat)
 [RECV] unsat
diff --git a/SBVTestSuite/GoldFiles/barrelRotate_Right_Word8_Word64.gold b/SBVTestSuite/GoldFiles/barrelRotate_Right_Word8_Word64.gold
--- a/SBVTestSuite/GoldFiles/barrelRotate_Right_Word8_Word64.gold
+++ b/SBVTestSuite/GoldFiles/barrelRotate_Right_Word8_Word64.gold
@@ -21,7 +21,7 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s3 () (_ BitVec 64) (bvurem s1 s2))
 [GOOD] (define-fun s4 () (_ BitVec 1) ((_ extract 2 2) s3))
 [GOOD] (define-fun s6 () Bool (distinct s4 s5))
@@ -43,6 +43,11 @@
 [GOOD] (define-fun s22 () (_ BitVec 8) ((_ rotate_right 7) s0))
 [GOOD] (define-fun s24 () (_ BitVec 8) (ite (bvule #x0000000000000008 s3) s23 (table0 s3)))
 [GOOD] (define-fun s25 () Bool (= s16 s24))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
 [GOOD] (assert (= (table0 #x0000000000000000) s0))
 [GOOD] (assert (= (table0 #x0000000000000001) s11))
 [GOOD] (assert (= (table0 #x0000000000000002) s17))
@@ -51,6 +56,7 @@
 [GOOD] (assert (= (table0 #x0000000000000005) s20))
 [GOOD] (assert (= (table0 #x0000000000000006) s21))
 [GOOD] (assert (= (table0 #x0000000000000007) s22))
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert (not s25))
 [SEND] (check-sat)
 [RECV] unsat
diff --git a/SBVTestSuite/GoldFiles/barrelRotate_Right_Word8_Word8.gold b/SBVTestSuite/GoldFiles/barrelRotate_Right_Word8_Word8.gold
--- a/SBVTestSuite/GoldFiles/barrelRotate_Right_Word8_Word8.gold
+++ b/SBVTestSuite/GoldFiles/barrelRotate_Right_Word8_Word8.gold
@@ -21,7 +21,7 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s3 () (_ BitVec 8) (bvurem s1 s2))
 [GOOD] (define-fun s4 () (_ BitVec 1) ((_ extract 2 2) s3))
 [GOOD] (define-fun s6 () Bool (distinct s4 s5))
@@ -43,6 +43,11 @@
 [GOOD] (define-fun s22 () (_ BitVec 8) ((_ rotate_right 7) s0))
 [GOOD] (define-fun s24 () (_ BitVec 8) (ite (bvule #x08 s3) s23 (table0 s3)))
 [GOOD] (define-fun s25 () Bool (= s16 s24))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
 [GOOD] (assert (= (table0 #x00) s0))
 [GOOD] (assert (= (table0 #x01) s11))
 [GOOD] (assert (= (table0 #x02) s17))
@@ -51,6 +56,7 @@
 [GOOD] (assert (= (table0 #x05) s20))
 [GOOD] (assert (= (table0 #x06) s21))
 [GOOD] (assert (= (table0 #x07) s22))
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert (not s25))
 [SEND] (check-sat)
 [RECV] unsat
diff --git a/SBVTestSuite/GoldFiles/boxed1.gold b/SBVTestSuite/GoldFiles/boxed1.gold
deleted file mode 100644
--- a/SBVTestSuite/GoldFiles/boxed1.gold
+++ /dev/null
@@ -1,20 +0,0 @@
-Objective "min_x": Optimal in an extension field:
-  min_x        =           0.0 :: Real
-  max_x_plus_y =          13.0 :: Real
-  min_y        = 2.0 * epsilon :: Real
-  max_y        =           4.0 :: Real
-Objective "max_x_plus_y": Optimal in an extension field:
-  min_x        =           0.0 :: Real
-  max_x_plus_y =          13.0 :: Real
-  min_y        = 2.0 * epsilon :: Real
-  max_y        =           4.0 :: Real
-Objective "min_y": Optimal in an extension field:
-  min_x        =           0.0 :: Real
-  max_x_plus_y =          13.0 :: Real
-  min_y        = 2.0 * epsilon :: Real
-  max_y        =           4.0 :: Real
-Objective "max_y": Optimal in an extension field:
-  min_x        =           0.0 :: Real
-  max_x_plus_y =          13.0 :: Real
-  min_y        = 2.0 * epsilon :: Real
-  max_y        =           4.0 :: Real
diff --git a/SBVTestSuite/GoldFiles/charConstr00.gold b/SBVTestSuite/GoldFiles/charConstr00.gold
--- a/SBVTestSuite/GoldFiles/charConstr00.gold
+++ b/SBVTestSuite/GoldFiles/charConstr00.gold
@@ -19,8 +19,14 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s2 () Bool (distinct s0 s1))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s2)
 [SEND] (check-sat)
 [RECV] sat
diff --git a/SBVTestSuite/GoldFiles/charConstr01.gold b/SBVTestSuite/GoldFiles/charConstr01.gold
--- a/SBVTestSuite/GoldFiles/charConstr01.gold
+++ b/SBVTestSuite/GoldFiles/charConstr01.gold
@@ -23,9 +23,15 @@
                             (= 1 (str.len result))
                        )))
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s1 () String (cf s0))
 [GOOD] (define-fun s3 () Bool (distinct s1 s2))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s3)
 [SEND] (check-sat)
 [RECV] sat
diff --git a/SBVTestSuite/GoldFiles/charConstr02.gold b/SBVTestSuite/GoldFiles/charConstr02.gold
--- a/SBVTestSuite/GoldFiles/charConstr02.gold
+++ b/SBVTestSuite/GoldFiles/charConstr02.gold
@@ -33,9 +33,15 @@
                             )
                        )))
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s1 () (SBVTuple3 String String String) (cf3 s0))
 [GOOD] (define-fun s3 () Bool (distinct s1 s2))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s3)
 [SEND] (check-sat)
 [RECV] sat
diff --git a/SBVTestSuite/GoldFiles/charConstr03.gold b/SBVTestSuite/GoldFiles/charConstr03.gold
--- a/SBVTestSuite/GoldFiles/charConstr03.gold
+++ b/SBVTestSuite/GoldFiles/charConstr03.gold
@@ -27,8 +27,14 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s2 () Bool (distinct s0 s1))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s2)
 [SEND] (check-sat)
 [RECV] sat
diff --git a/SBVTestSuite/GoldFiles/charConstr04.gold b/SBVTestSuite/GoldFiles/charConstr04.gold
--- a/SBVTestSuite/GoldFiles/charConstr04.gold
+++ b/SBVTestSuite/GoldFiles/charConstr04.gold
@@ -25,8 +25,14 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s2 () Bool (distinct s0 s1))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s2)
 [SEND] (check-sat)
 [RECV] sat
diff --git a/SBVTestSuite/GoldFiles/charConstr05.gold b/SBVTestSuite/GoldFiles/charConstr05.gold
--- a/SBVTestSuite/GoldFiles/charConstr05.gold
+++ b/SBVTestSuite/GoldFiles/charConstr05.gold
@@ -25,8 +25,14 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s2 () Bool (distinct s0 s1))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s2)
 [SEND] (check-sat)
 [RECV] sat
diff --git a/SBVTestSuite/GoldFiles/charConstr06.gold b/SBVTestSuite/GoldFiles/charConstr06.gold
--- a/SBVTestSuite/GoldFiles/charConstr06.gold
+++ b/SBVTestSuite/GoldFiles/charConstr06.gold
@@ -27,8 +27,14 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s2 () Bool (distinct s0 s1))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s2)
 [SEND] (check-sat)
 [RECV] sat
diff --git a/SBVTestSuite/GoldFiles/charConstr07.gold b/SBVTestSuite/GoldFiles/charConstr07.gold
--- a/SBVTestSuite/GoldFiles/charConstr07.gold
+++ b/SBVTestSuite/GoldFiles/charConstr07.gold
@@ -25,11 +25,17 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s1 () Bool ((_ is (nothing_SBVMaybe () (SBVMaybe String))) s0))
 [GOOD] (define-fun s2 () Bool (ite s1 false true))
 [GOOD] (define-fun s4 () Bool (distinct s0 s3))
 [GOOD] (define-fun s5 () Bool (and s2 s4))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s5)
 [SEND] (check-sat)
 [RECV] sat
diff --git a/SBVTestSuite/GoldFiles/charConstr08.gold b/SBVTestSuite/GoldFiles/charConstr08.gold
--- a/SBVTestSuite/GoldFiles/charConstr08.gold
+++ b/SBVTestSuite/GoldFiles/charConstr08.gold
@@ -23,28 +23,22 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s2 () Bool (select s0 s1))
 [GOOD] (define-fun s4 () Bool (select s0 s3))
 [GOOD] (define-fun s5 () Bool (not s4))
 [GOOD] (define-fun s6 () Bool (and s2 s5))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s6)
 [SEND] (check-sat)
 [RECV] sat
 [SEND] (get-value (s0))
-[RECV] ((s0 (store (store (store (store (store (store ((as const (Array String Bool)) true)
-                                                 "EF"
-                                                 false)
-                                          "CD"
-                                          false)
-                                   "GH"
-                                   false)
-                            "B"
-                            false)
-                     ""
-                     false)
-              "A"
-              true)))
+[RECV] ((s0 (store (store ((as const (Array String Bool)) true) "B" false) "A" true)))
 
 MODEL: SMTModel {modelObjectives = [], modelBindings = Nothing, modelAssocs = [("x",U - {'B'} :: {Char})], modelUIFuns = []}
 DONE.*** Solver   : Z3
diff --git a/SBVTestSuite/GoldFiles/charConstr09.gold b/SBVTestSuite/GoldFiles/charConstr09.gold
--- a/SBVTestSuite/GoldFiles/charConstr09.gold
+++ b/SBVTestSuite/GoldFiles/charConstr09.gold
@@ -25,9 +25,15 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s1 () Int (seq.len s0))
 [GOOD] (define-fun s3 () Bool (= s1 s2))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s3)
 [SEND] (check-sat)
 [RECV] sat
diff --git a/SBVTestSuite/GoldFiles/charConstr10.gold b/SBVTestSuite/GoldFiles/charConstr10.gold
--- a/SBVTestSuite/GoldFiles/charConstr10.gold
+++ b/SBVTestSuite/GoldFiles/charConstr10.gold
@@ -27,13 +27,19 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s1 () Int (seq.len s0))
 [GOOD] (define-fun s3 () Bool (= s1 s2))
 [GOOD] (define-fun s5 () (SBVTuple2 (SBVTuple2 String String) (Seq Int)) (seq.nth s0 s4))
 [GOOD] (define-fun s6 () (SBVTuple2 String String) (proj_1_SBVTuple2 s5))
 [GOOD] (define-fun s7 () String (proj_1_SBVTuple2 s6))
 [GOOD] (define-fun s9 () Bool (= s7 s8))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s3)
 [GOOD] (assert s9)
 [SEND] (check-sat)
diff --git a/SBVTestSuite/GoldFiles/charConstr11.gold b/SBVTestSuite/GoldFiles/charConstr11.gold
--- a/SBVTestSuite/GoldFiles/charConstr11.gold
+++ b/SBVTestSuite/GoldFiles/charConstr11.gold
@@ -31,10 +31,16 @@
                             (forall ((seq0 Int)) (=> (and (>= seq0 0) (< seq0 (seq.len result))) (and (= 1 (str.len (proj_1_SBVTuple2 (proj_1_SBVTuple2 (seq.nth result seq0))))) (= 1 (str.len (proj_2_SBVTuple2 (proj_1_SBVTuple2 (seq.nth result seq0))))))))
                        )))
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s2 () (Seq (SBVTuple2 (SBVTuple2 String String) (Seq Int))) (cf4 s0 s1))
 [GOOD] (define-fun s3 () Int (seq.len s2))
 [GOOD] (define-fun s5 () Bool (= s3 s4))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s5)
 [SEND] (check-sat)
 [RECV] sat
diff --git a/SBVTestSuite/GoldFiles/concreteFoldl.gold b/SBVTestSuite/GoldFiles/concreteFoldl.gold
--- a/SBVTestSuite/GoldFiles/concreteFoldl.gold
+++ b/SBVTestSuite/GoldFiles/concreteFoldl.gold
@@ -16,7 +16,13 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
+[GOOD] ; --- preQuantifier assignments ---
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
 [GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [SEND] (check-sat)
 [RECV] sat
 *** Solver   : Z3
diff --git a/SBVTestSuite/GoldFiles/concreteFoldr.gold b/SBVTestSuite/GoldFiles/concreteFoldr.gold
--- a/SBVTestSuite/GoldFiles/concreteFoldr.gold
+++ b/SBVTestSuite/GoldFiles/concreteFoldr.gold
@@ -16,7 +16,13 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
+[GOOD] ; --- preQuantifier assignments ---
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
 [GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [SEND] (check-sat)
 [RECV] sat
 *** Solver   : Z3
diff --git a/SBVTestSuite/GoldFiles/concreteReverse.gold b/SBVTestSuite/GoldFiles/concreteReverse.gold
--- a/SBVTestSuite/GoldFiles/concreteReverse.gold
+++ b/SBVTestSuite/GoldFiles/concreteReverse.gold
@@ -16,7 +16,13 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
+[GOOD] ; --- preQuantifier assignments ---
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
 [GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [SEND] (check-sat)
 [RECV] sat
 *** Solver   : Z3
diff --git a/SBVTestSuite/GoldFiles/concreteSort.gold b/SBVTestSuite/GoldFiles/concreteSort.gold
--- a/SBVTestSuite/GoldFiles/concreteSort.gold
+++ b/SBVTestSuite/GoldFiles/concreteSort.gold
@@ -16,7 +16,13 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
+[GOOD] ; --- preQuantifier assignments ---
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
 [GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [SEND] (check-sat)
 [RECV] sat
 *** Solver   : Z3
diff --git a/SBVTestSuite/GoldFiles/constArr2_SArray.gold b/SBVTestSuite/GoldFiles/constArr2_SArray.gold
--- a/SBVTestSuite/GoldFiles/constArr2_SArray.gold
+++ b/SBVTestSuite/GoldFiles/constArr2_SArray.gold
@@ -34,7 +34,7 @@
 [GOOD] (define-fun array_4_initializer_0 () Bool (= array_4 (store array_3 s9 s15)))
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s2 () Bool (distinct s0 s1))
 [GOOD] (define-fun s4 () Bool (= s0 s3))
 [GOOD] (define-fun s6 () Bool (= s0 s5))
@@ -46,7 +46,9 @@
 [GOOD] (define-fun s17 () Int (select array_4 s0))
 [GOOD] (define-fun s18 () Int (select array_4 s1))
 [GOOD] (define-fun s19 () Bool (= s17 s18))
-[GOOD] (define-fun array_0_initializer () Bool true) ; no initializiation needed
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] (define-fun array_0_initializer () Bool true) ; no initialization needed
 [GOOD] (define-fun array_1_initializer () Bool array_1_initializer_0)
 [GOOD] (assert array_1_initializer)
 [GOOD] (define-fun array_2_initializer () Bool array_2_initializer_0)
@@ -55,6 +57,10 @@
 [GOOD] (assert array_3_initializer)
 [GOOD] (define-fun array_4_initializer () Bool array_4_initializer_0)
 [GOOD] (assert array_4_initializer)
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s2)
 [GOOD] (assert s13)
 [GOOD] (assert s19)
diff --git a/SBVTestSuite/GoldFiles/constArr2_SFunArray.gold b/SBVTestSuite/GoldFiles/constArr2_SFunArray.gold
deleted file mode 100644
--- a/SBVTestSuite/GoldFiles/constArr2_SFunArray.gold
+++ /dev/null
@@ -1,67 +0,0 @@
-** Calling: z3 -nw -in -smt2
-[GOOD] ; Automatically generated by SBV. Do not edit.
-[GOOD] (set-option :print-success true)
-[GOOD] (set-option :global-declarations true)
-[GOOD] (set-option :smtlib2_compliant true)
-[GOOD] (set-option :diagnostic-output-channel "stdout")
-[GOOD] (set-option :produce-models true)
-[GOOD] (set-logic ALL) ; has unbounded values, using catch-all.
-[GOOD] ; --- uninterpreted sorts ---
-[GOOD] ; --- tuples ---
-[GOOD] ; --- sums ---
-[GOOD] ; --- literal constants ---
-[GOOD] (define-fun s3 () Int 1)
-[GOOD] (define-fun s5 () Int 2)
-[GOOD] (define-fun s7 () Int 3)
-[GOOD] (define-fun s9 () Int 75)
-[GOOD] (define-fun s14 () Int 12)
-[GOOD] (define-fun s15 () Int 5)
-[GOOD] (define-fun s16 () Int 6)
-[GOOD] ; --- skolem constants ---
-[GOOD] (declare-fun s0 () Int) ; tracks user variable "i"
-[GOOD] (declare-fun s1 () Int) ; tracks user variable "j"
-[GOOD] ; --- constant tables ---
-[GOOD] ; --- skolemized tables ---
-[GOOD] ; --- arrays ---
-[GOOD] ; --- uninterpreted constants ---
-[GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
-[GOOD] (define-fun s2 () Bool (distinct s0 s1))
-[GOOD] (define-fun s4 () Bool (= s0 s3))
-[GOOD] (define-fun s6 () Bool (= s0 s5))
-[GOOD] (define-fun s8 () Bool (= s0 s7))
-[GOOD] (define-fun s10 () Bool (= s0 s9))
-[GOOD] (define-fun s11 () Bool (or s8 s10))
-[GOOD] (define-fun s12 () Bool (or s6 s11))
-[GOOD] (define-fun s13 () Bool (or s4 s12))
-[GOOD] (define-fun s17 () Int (ite s10 s15 s5))
-[GOOD] (define-fun s18 () Int (ite s8 s16 s17))
-[GOOD] (define-fun s19 () Int (ite s6 s15 s18))
-[GOOD] (define-fun s20 () Int (ite s4 s14 s19))
-[GOOD] (define-fun s21 () Bool (= s0 s1))
-[GOOD] (define-fun s22 () Bool (= s1 s3))
-[GOOD] (define-fun s23 () Bool (= s1 s5))
-[GOOD] (define-fun s24 () Bool (= s1 s7))
-[GOOD] (define-fun s25 () Bool (= s1 s9))
-[GOOD] (define-fun s26 () Int (ite s25 s15 s5))
-[GOOD] (define-fun s27 () Int (ite s24 s16 s26))
-[GOOD] (define-fun s28 () Int (ite s23 s15 s27))
-[GOOD] (define-fun s29 () Int (ite s22 s14 s28))
-[GOOD] (define-fun s30 () Int (ite s21 s20 s29))
-[GOOD] (define-fun s31 () Bool (= s20 s30))
-[GOOD] (assert s2)
-[GOOD] (assert s13)
-[GOOD] (assert s31)
-[SEND] (check-sat)
-[RECV] sat
-[SEND] (get-value (s0))
-[RECV] ((s0 2))
-[SEND] (get-value (s1))
-[RECV] ((s1 75))
-*** Solver   : Z3
-*** Exit code: ExitSuccess
-
-FINAL OUTPUT:
-Satisfiable. Model:
-  i =  2 :: Integer
-  j = 75 :: Integer
diff --git a/SBVTestSuite/GoldFiles/constArr_SArray.gold b/SBVTestSuite/GoldFiles/constArr_SArray.gold
--- a/SBVTestSuite/GoldFiles/constArr_SArray.gold
+++ b/SBVTestSuite/GoldFiles/constArr_SArray.gold
@@ -35,7 +35,7 @@
 [GOOD] (define-fun array_4_initializer_0 () Bool (= array_4 (store array_3 s9 s16)))
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s2 () Bool (distinct s0 s1))
 [GOOD] (define-fun s4 () Bool (= s0 s3))
 [GOOD] (define-fun s6 () Bool (= s0 s5))
@@ -47,7 +47,9 @@
 [GOOD] (define-fun s18 () Int (select array_4 s0))
 [GOOD] (define-fun s19 () Int (select array_4 s1))
 [GOOD] (define-fun s20 () Bool (= s18 s19))
-[GOOD] (define-fun array_0_initializer () Bool true) ; no initializiation needed
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] (define-fun array_0_initializer () Bool true) ; no initialization needed
 [GOOD] (define-fun array_1_initializer () Bool array_1_initializer_0)
 [GOOD] (assert array_1_initializer)
 [GOOD] (define-fun array_2_initializer () Bool array_2_initializer_0)
@@ -56,6 +58,10 @@
 [GOOD] (assert array_3_initializer)
 [GOOD] (define-fun array_4_initializer () Bool array_4_initializer_0)
 [GOOD] (assert array_4_initializer)
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s2)
 [GOOD] (assert s13)
 [GOOD] (assert s20)
diff --git a/SBVTestSuite/GoldFiles/constArr_SFunArray.gold b/SBVTestSuite/GoldFiles/constArr_SFunArray.gold
deleted file mode 100644
--- a/SBVTestSuite/GoldFiles/constArr_SFunArray.gold
+++ /dev/null
@@ -1,68 +0,0 @@
-** Calling: z3 -nw -in -smt2
-[GOOD] ; Automatically generated by SBV. Do not edit.
-[GOOD] (set-option :print-success true)
-[GOOD] (set-option :global-declarations true)
-[GOOD] (set-option :smtlib2_compliant true)
-[GOOD] (set-option :diagnostic-output-channel "stdout")
-[GOOD] (set-option :produce-models true)
-[GOOD] (set-logic ALL) ; has unbounded values, using catch-all.
-[GOOD] ; --- uninterpreted sorts ---
-[GOOD] ; --- tuples ---
-[GOOD] ; --- sums ---
-[GOOD] ; --- literal constants ---
-[GOOD] (define-fun s3 () Int 1)
-[GOOD] (define-fun s5 () Int 2)
-[GOOD] (define-fun s7 () Int 3)
-[GOOD] (define-fun s9 () Int 75)
-[GOOD] (define-fun s14 () Int 12)
-[GOOD] (define-fun s15 () Int 5)
-[GOOD] (define-fun s16 () Int 6)
-[GOOD] (define-fun s17 () Int 7)
-[GOOD] ; --- skolem constants ---
-[GOOD] (declare-fun s0 () Int) ; tracks user variable "i"
-[GOOD] (declare-fun s1 () Int) ; tracks user variable "j"
-[GOOD] ; --- constant tables ---
-[GOOD] ; --- skolemized tables ---
-[GOOD] ; --- arrays ---
-[GOOD] ; --- uninterpreted constants ---
-[GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
-[GOOD] (define-fun s2 () Bool (distinct s0 s1))
-[GOOD] (define-fun s4 () Bool (= s0 s3))
-[GOOD] (define-fun s6 () Bool (= s0 s5))
-[GOOD] (define-fun s8 () Bool (= s0 s7))
-[GOOD] (define-fun s10 () Bool (= s0 s9))
-[GOOD] (define-fun s11 () Bool (or s8 s10))
-[GOOD] (define-fun s12 () Bool (or s6 s11))
-[GOOD] (define-fun s13 () Bool (or s4 s12))
-[GOOD] (define-fun s18 () Int (ite s10 s15 s17))
-[GOOD] (define-fun s19 () Int (ite s8 s16 s18))
-[GOOD] (define-fun s20 () Int (ite s6 s15 s19))
-[GOOD] (define-fun s21 () Int (ite s4 s14 s20))
-[GOOD] (define-fun s22 () Bool (= s0 s1))
-[GOOD] (define-fun s23 () Bool (= s1 s3))
-[GOOD] (define-fun s24 () Bool (= s1 s5))
-[GOOD] (define-fun s25 () Bool (= s1 s7))
-[GOOD] (define-fun s26 () Bool (= s1 s9))
-[GOOD] (define-fun s27 () Int (ite s26 s15 s17))
-[GOOD] (define-fun s28 () Int (ite s25 s16 s27))
-[GOOD] (define-fun s29 () Int (ite s24 s15 s28))
-[GOOD] (define-fun s30 () Int (ite s23 s14 s29))
-[GOOD] (define-fun s31 () Int (ite s22 s21 s30))
-[GOOD] (define-fun s32 () Bool (= s21 s31))
-[GOOD] (assert s2)
-[GOOD] (assert s13)
-[GOOD] (assert s32)
-[SEND] (check-sat)
-[RECV] sat
-[SEND] (get-value (s0))
-[RECV] ((s0 75))
-[SEND] (get-value (s1))
-[RECV] ((s1 2))
-*** Solver   : Z3
-*** Exit code: ExitSuccess
-
-FINAL OUTPUT:
-Satisfiable. Model:
-  i = 75 :: Integer
-  j =  2 :: Integer
diff --git a/SBVTestSuite/GoldFiles/dsat01.gold b/SBVTestSuite/GoldFiles/dsat01.gold
--- a/SBVTestSuite/GoldFiles/dsat01.gold
+++ b/SBVTestSuite/GoldFiles/dsat01.gold
@@ -21,9 +21,15 @@
 [ISSUE] ; --- arrays ---
 [ISSUE] ; --- uninterpreted constants ---
 [ISSUE] ; --- user given axioms ---
-[ISSUE] ; --- formula ---
+[ISSUE] ; --- preQuantifier assignments ---
 [ISSUE] (define-fun s4 () Bool (> s0 s3))
 [ISSUE] (define-fun s6 () Bool (<= s0 s5))
+[ISSUE] ; --- arrayDelayeds ---
+[ISSUE] ; --- arraySetups ---
+[ISSUE] ; --- formula ---
+[ISSUE] ; --- postQuantifier assignments ---
+[ISSUE] ; --- delayedEqualities ---
+[ISSUE] ; -- finalAssert ---
 [ISSUE] (assert s4)
 [ISSUE] (assert s6)
 [FIRE] (declare-fun s7 () Real)
diff --git a/SBVTestSuite/GoldFiles/exceptionLocal1.gold b/SBVTestSuite/GoldFiles/exceptionLocal1.gold
--- a/SBVTestSuite/GoldFiles/exceptionLocal1.gold
+++ b/SBVTestSuite/GoldFiles/exceptionLocal1.gold
@@ -17,7 +17,7 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s1 () (_ BitVec 1) ((_ extract 0 0) s0))
 [GOOD] (define-fun s3 () Bool (distinct s1 s2))
 [GOOD] (define-fun s4 () Bool (not s3))
diff --git a/SBVTestSuite/GoldFiles/foldlABC1.gold b/SBVTestSuite/GoldFiles/foldlABC1.gold
--- a/SBVTestSuite/GoldFiles/foldlABC1.gold
+++ b/SBVTestSuite/GoldFiles/foldlABC1.gold
@@ -23,7 +23,7 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s4 () Bool (> s0 s3))
 [GOOD] (define-fun s5 () Bool (> s1 s3))
 [GOOD] (define-fun s6 () Bool (> s2 s3))
@@ -39,6 +39,12 @@
 [GOOD] (define-fun s16 () Int (+ s0 s1))
 [GOOD] (define-fun s17 () Int (+ s2 s16))
 [GOOD] (define-fun s18 () Bool (= s15 s17))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s4)
 [GOOD] (assert s5)
 [GOOD] (assert s6)
diff --git a/SBVTestSuite/GoldFiles/foldlABC2.gold b/SBVTestSuite/GoldFiles/foldlABC2.gold
--- a/SBVTestSuite/GoldFiles/foldlABC2.gold
+++ b/SBVTestSuite/GoldFiles/foldlABC2.gold
@@ -24,7 +24,7 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s4 () Bool (> s0 s3))
 [GOOD] (define-fun s5 () Bool (> s1 s3))
 [GOOD] (define-fun s6 () Bool (> s2 s3))
@@ -47,6 +47,12 @@
 [GOOD] (define-fun s24 () Int (+ s0 s1))
 [GOOD] (define-fun s25 () Int (+ s2 s24))
 [GOOD] (define-fun s26 () Bool (= s23 s25))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s4)
 [GOOD] (assert s5)
 [GOOD] (assert s6)
diff --git a/SBVTestSuite/GoldFiles/foldlABC3.gold b/SBVTestSuite/GoldFiles/foldlABC3.gold
--- a/SBVTestSuite/GoldFiles/foldlABC3.gold
+++ b/SBVTestSuite/GoldFiles/foldlABC3.gold
@@ -24,7 +24,7 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s4 () Bool (> s0 s3))
 [GOOD] (define-fun s5 () Bool (> s1 s3))
 [GOOD] (define-fun s6 () Bool (> s2 s3))
@@ -54,6 +54,12 @@
 [GOOD] (define-fun s31 () Int (+ s0 s1))
 [GOOD] (define-fun s32 () Int (+ s2 s31))
 [GOOD] (define-fun s33 () Bool (= s30 s32))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s4)
 [GOOD] (assert s5)
 [GOOD] (assert s6)
diff --git a/SBVTestSuite/GoldFiles/foldrAB1.gold b/SBVTestSuite/GoldFiles/foldrAB1.gold
--- a/SBVTestSuite/GoldFiles/foldrAB1.gold
+++ b/SBVTestSuite/GoldFiles/foldrAB1.gold
@@ -22,7 +22,7 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s3 () Bool (> s0 s2))
 [GOOD] (define-fun s4 () Bool (> s1 s2))
 [GOOD] (define-fun s5 () (Seq Int) (seq.unit s0))
@@ -34,6 +34,12 @@
 [GOOD] (define-fun s11 () Int (ite s9 s2 s10))
 [GOOD] (define-fun s12 () Int (+ s0 s1))
 [GOOD] (define-fun s13 () Bool (= s11 s12))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s3)
 [GOOD] (assert s4)
 [GOOD] (assert s13)
diff --git a/SBVTestSuite/GoldFiles/foldrAB2.gold b/SBVTestSuite/GoldFiles/foldrAB2.gold
--- a/SBVTestSuite/GoldFiles/foldrAB2.gold
+++ b/SBVTestSuite/GoldFiles/foldrAB2.gold
@@ -23,7 +23,7 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s3 () Bool (> s0 s2))
 [GOOD] (define-fun s4 () Bool (> s1 s2))
 [GOOD] (define-fun s5 () (Seq Int) (seq.unit s0))
@@ -42,6 +42,12 @@
 [GOOD] (define-fun s19 () Int (ite s9 s2 s18))
 [GOOD] (define-fun s20 () Int (+ s0 s1))
 [GOOD] (define-fun s21 () Bool (= s19 s20))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s3)
 [GOOD] (assert s4)
 [GOOD] (assert s21)
diff --git a/SBVTestSuite/GoldFiles/foldrAB3.gold b/SBVTestSuite/GoldFiles/foldrAB3.gold
--- a/SBVTestSuite/GoldFiles/foldrAB3.gold
+++ b/SBVTestSuite/GoldFiles/foldrAB3.gold
@@ -23,7 +23,7 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s3 () Bool (> s0 s2))
 [GOOD] (define-fun s4 () Bool (> s1 s2))
 [GOOD] (define-fun s5 () (Seq Int) (seq.unit s0))
@@ -49,6 +49,12 @@
 [GOOD] (define-fun s26 () Int (ite s9 s2 s25))
 [GOOD] (define-fun s27 () Int (+ s0 s1))
 [GOOD] (define-fun s28 () Bool (= s26 s27))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s3)
 [GOOD] (assert s4)
 [GOOD] (assert s28)
diff --git a/SBVTestSuite/GoldFiles/freshVars.gold b/SBVTestSuite/GoldFiles/freshVars.gold
--- a/SBVTestSuite/GoldFiles/freshVars.gold
+++ b/SBVTestSuite/GoldFiles/freshVars.gold
@@ -20,8 +20,14 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s2 () Bool (= s0 s1))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s2)
 [GOOD] (declare-fun s3 () Bool)
 [GOOD] (declare-fun s4 () (_ BitVec 8))
@@ -91,72 +97,58 @@
 [GOOD] (define-fun s48 () Bool (fp.isPositive s17))
 [GOOD] (assert s48)
 [GOOD] (declare-fun array_0 () (Array Int Int))
-[GOOD] (define-fun array_0_initializer () Bool true) ; no initializiation needed
+[GOOD] (define-fun array_0_initializer () Bool true) ; no initialization needed
 [GOOD] (declare-fun s49 () Int)
 [GOOD] (declare-fun s50 () Bool)
 [GOOD] (define-fun s52 () Int 2)
 [GOOD] (define-fun s51 () Int (select array_0 s49))
 [GOOD] (define-fun s53 () Bool (= s51 s52))
 [GOOD] (assert s53)
-[GOOD] (define-fun s55 () String (_ char #x61))
-[GOOD] (declare-fun vFArray_uninitializedRead (Bool) String)
-[GOOD] (assert (forall ((a1 Bool))
-                       (let ((result (vFArray_uninitializedRead a1)))
-                            (= 1 (str.len result))
-                       )))
-[GOOD] (define-fun s54 () String (vFArray_uninitializedRead s50))
-[GOOD] (define-fun s56 () Bool (= s54 s55))
-[GOOD] (assert s56)
-[GOOD] (define-fun s57 () Int 42)
+[GOOD] (define-fun s54 () Int 42)
 [GOOD] (define-fun array_1 () (Array Int Int) ((as const (Array Int Int)) 42))
-[GOOD] (define-fun array_1_initializer () Bool true) ; no initializiation needed
-[GOOD] (declare-fun s58 () Int)
-[GOOD] (declare-fun s59 () String)
-[GOOD] (assert (= 1 (str.len s59)))
-[GOOD] (define-fun s60 () Int 96)
-[GOOD] (define-fun s61 () Int (select array_1 s60))
-[GOOD] (define-fun s62 () Bool (= s58 s61))
-[GOOD] (assert s62)
-[GOOD] (define-fun s63 () String (_ char #x58))
-[GOOD] (define-fun s64 () Bool (= s59 s63))
-[GOOD] (assert s64)
-[GOOD] (define-fun s65 () Int 1)
-[GOOD] (define-fun s66 () Bool (= s49 s65))
-[GOOD] (assert s66)
-[GOOD] (define-fun s67 () Bool (not s50))
-[GOOD] (assert s67)
-[GOOD] (declare-fun s68 () String)
+[GOOD] (define-fun array_1_initializer () Bool true) ; no initialization needed
+[GOOD] (declare-fun s55 () Int)
+[GOOD] (define-fun s56 () Int 96)
+[GOOD] (define-fun s57 () Int (select array_1 s56))
+[GOOD] (define-fun s58 () Bool (= s55 s57))
+[GOOD] (assert s58)
+[GOOD] (define-fun s59 () Int 1)
+[GOOD] (define-fun s60 () Bool (= s49 s59))
+[GOOD] (assert s60)
+[GOOD] (define-fun s61 () Bool (not s50))
+[GOOD] (assert s61)
+[GOOD] (declare-fun s62 () String)
 [GOOD] (set-option :pp.max_depth      4294967295)
 [GOOD] (set-option :pp.min_alias_size 4294967295)
 [GOOD] (set-option :model.inline_def  true      )
-[GOOD] (declare-fun s69 () (Seq Int))
+[GOOD] (declare-fun s63 () (Seq Int))
 [GOOD] (set-option :pp.max_depth      4294967295)
 [GOOD] (set-option :pp.min_alias_size 4294967295)
 [GOOD] (set-option :model.inline_def  true      )
-[GOOD] (declare-fun s70 () (Seq (Seq Int)))
+[GOOD] (declare-fun s64 () (Seq (Seq Int)))
 [GOOD] (set-option :pp.max_depth      4294967295)
 [GOOD] (set-option :pp.min_alias_size 4294967295)
 [GOOD] (set-option :model.inline_def  true      )
-[GOOD] (declare-fun s71 () (Seq (_ BitVec 8)))
+[GOOD] (declare-fun s65 () (Seq (_ BitVec 8)))
 [GOOD] (set-option :pp.max_depth      4294967295)
 [GOOD] (set-option :pp.min_alias_size 4294967295)
 [GOOD] (set-option :model.inline_def  true      )
-[GOOD] (declare-fun s72 () (Seq (Seq (_ BitVec 16))))
-[GOOD] (define-fun s73 () String "hello")
-[GOOD] (define-fun s74 () Bool (= s68 s73))
+[GOOD] (declare-fun s66 () (Seq (Seq (_ BitVec 16))))
+[GOOD] (define-fun s67 () String "hello")
+[GOOD] (define-fun s68 () Bool (= s62 s67))
+[GOOD] (assert s68)
+[GOOD] (define-fun s69 () (Seq Int) (seq.++ (seq.unit 1) (seq.unit 2) (seq.unit 3) (seq.unit 4)))
+[GOOD] (define-fun s70 () Bool (= s63 s69))
+[GOOD] (assert s70)
+[GOOD] (define-fun s71 () (Seq (Seq Int)) (seq.++ (seq.unit (seq.++ (seq.unit 1) (seq.unit 2) (seq.unit 3))) (seq.unit (seq.++ (seq.unit 4) (seq.unit 5) (seq.unit 6) (seq.unit 7)))))
+[GOOD] (define-fun s72 () Bool (= s64 s71))
+[GOOD] (assert s72)
+[GOOD] (define-fun s73 () (Seq (_ BitVec 8)) (seq.++ (seq.unit #x01) (seq.unit #x02)))
+[GOOD] (define-fun s74 () Bool (= s65 s73))
 [GOOD] (assert s74)
-[GOOD] (define-fun s75 () (Seq Int) (seq.++ (seq.unit 1) (seq.unit 2) (seq.unit 3) (seq.unit 4)))
-[GOOD] (define-fun s76 () Bool (= s69 s75))
+[GOOD] (define-fun s75 () (Seq (Seq (_ BitVec 16))) (seq.++ (seq.unit (seq.++ (seq.unit #x0001) (seq.unit #x0002) (seq.unit #x0003))) (seq.unit (as seq.empty (Seq (_ BitVec 16)))) (seq.unit (seq.++ (seq.unit #x0004) (seq.unit #x0005) (seq.unit #x0006)))))
+[GOOD] (define-fun s76 () Bool (= s66 s75))
 [GOOD] (assert s76)
-[GOOD] (define-fun s77 () (Seq (Seq Int)) (seq.++ (seq.unit (seq.++ (seq.unit 1) (seq.unit 2) (seq.unit 3))) (seq.unit (seq.++ (seq.unit 4) (seq.unit 5) (seq.unit 6) (seq.unit 7)))))
-[GOOD] (define-fun s78 () Bool (= s70 s77))
-[GOOD] (assert s78)
-[GOOD] (define-fun s79 () (Seq (_ BitVec 8)) (seq.++ (seq.unit #x01) (seq.unit #x02)))
-[GOOD] (define-fun s80 () Bool (= s71 s79))
-[GOOD] (assert s80)
-[GOOD] (define-fun s81 () (Seq (Seq (_ BitVec 16))) (seq.++ (seq.unit (seq.++ (seq.unit #x0001) (seq.unit #x0002) (seq.unit #x0003))) (seq.unit (as seq.empty (Seq (_ BitVec 16)))) (seq.unit (seq.++ (seq.unit #x0004) (seq.unit #x0005) (seq.unit #x0006)))))
-[GOOD] (define-fun s82 () Bool (= s72 s81))
-[GOOD] (assert s82)
 [SEND] (check-sat)
 [RECV] sat
 [SEND] (get-value (s0))
@@ -198,21 +190,19 @@
 [RECV] ((s49 1))
 [SEND] (get-value (s50))
 [RECV] ((s50 false))
-[SEND] (get-value (s58))
-[RECV] ((s58 42))
-[SEND] (get-value (s59))
-[RECV] ((s59 "X"))
-[SEND] (get-value (s68))
-[RECV] ((s68 "hello"))
-[SEND] (get-value (s69))
-[RECV] ((s69 (seq.++ (seq.unit 1) (seq.unit 2) (seq.unit 3) (seq.unit 4))))
-[SEND] (get-value (s70))
-[RECV] ((s70 (seq.++ (seq.unit (seq.++ (seq.unit 1) (seq.unit 2) (seq.unit 3)))
+[SEND] (get-value (s55))
+[RECV] ((s55 42))
+[SEND] (get-value (s62))
+[RECV] ((s62 "hello"))
+[SEND] (get-value (s63))
+[RECV] ((s63 (seq.++ (seq.unit 1) (seq.unit 2) (seq.unit 3) (seq.unit 4))))
+[SEND] (get-value (s64))
+[RECV] ((s64 (seq.++ (seq.unit (seq.++ (seq.unit 1) (seq.unit 2) (seq.unit 3)))
                (seq.unit (seq.++ (seq.unit 4) (seq.unit 5) (seq.unit 6) (seq.unit 7))))))
-[SEND] (get-value (s71))
-[RECV] ((s71 (seq.++ (seq.unit #x01) (seq.unit #x02))))
-[SEND] (get-value (s72))
-[RECV] ((s72 (seq.++ (seq.unit (seq.++ (seq.unit #x0001) (seq.unit #x0002) (seq.unit #x0003)))
+[SEND] (get-value (s65))
+[RECV] ((s65 (seq.++ (seq.unit #x01) (seq.unit #x02))))
+[SEND] (get-value (s66))
+[RECV] ((s66 (seq.++ (seq.unit (seq.++ (seq.unit #x0001) (seq.unit #x0002) (seq.unit #x0003)))
                (seq.unit (as seq.empty (Seq (_ BitVec 16))))
                (seq.unit (seq.++ (seq.unit #x0004) (seq.unit #x0005) (seq.unit #x0006))))))
 [SEND] (get-value (s17))
@@ -241,7 +231,6 @@
   i1       =                    1 :: Integer
   i2       =                False :: Bool
   mustBe42 =                   42 :: Integer
-  mustBeX  =                  'X' :: Char
   vString  =              "hello" :: String
   vList1   =            [1,2,3,4] :: [Integer]
   vList2   =  [[1,2,3],[4,5,6,7]] :: [[Integer]]
diff --git a/SBVTestSuite/GoldFiles/genBenchMark1.gold b/SBVTestSuite/GoldFiles/genBenchMark1.gold
--- a/SBVTestSuite/GoldFiles/genBenchMark1.gold
+++ b/SBVTestSuite/GoldFiles/genBenchMark1.gold
@@ -14,8 +14,14 @@
 ; --- arrays ---
 ; --- uninterpreted constants ---
 ; --- user given axioms ---
-; --- formula ---
+; --- preQuantifier assignments ---
 (define-fun s2 () (_ BitVec 8) (bvadd s0 s1))
 (define-fun s3 () Bool (= s0 s2))
+; --- arrayDelayeds ---
+; --- arraySetups ---
+; --- formula ---
+; --- postQuantifier assignments ---
+; --- delayedEqualities ---
+; -- finalAssert ---
 (assert (not s3))
 (check-sat)
diff --git a/SBVTestSuite/GoldFiles/genBenchMark2.gold b/SBVTestSuite/GoldFiles/genBenchMark2.gold
--- a/SBVTestSuite/GoldFiles/genBenchMark2.gold
+++ b/SBVTestSuite/GoldFiles/genBenchMark2.gold
@@ -14,8 +14,14 @@
 ; --- arrays ---
 ; --- uninterpreted constants ---
 ; --- user given axioms ---
-; --- formula ---
+; --- preQuantifier assignments ---
 (define-fun s2 () (_ BitVec 8) (bvadd s0 s1))
 (define-fun s3 () Bool (= s0 s2))
+; --- arrayDelayeds ---
+; --- arraySetups ---
+; --- formula ---
+; --- postQuantifier assignments ---
+; --- delayedEqualities ---
+; -- finalAssert ---
 (assert s3)
 (check-sat)
diff --git a/SBVTestSuite/GoldFiles/mapNoFailure.gold b/SBVTestSuite/GoldFiles/mapNoFailure.gold
--- a/SBVTestSuite/GoldFiles/mapNoFailure.gold
+++ b/SBVTestSuite/GoldFiles/mapNoFailure.gold
@@ -26,7 +26,7 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s3 () Int (+ s0 s1))
 [GOOD] (define-fun s4 () Int (+ s2 s3))
 [GOOD] (define-fun s6 () Bool (= s4 s5))
@@ -147,6 +147,12 @@
 [GOOD] (define-fun s124 () Bool (or s119 s123))
 [GOOD] (define-fun s125 () Bool (not s19))
 [GOOD] (define-fun s126 () Bool (and s124 s125))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s6)
 [GOOD] (assert s12)
 [GOOD] (assert s126)
diff --git a/SBVTestSuite/GoldFiles/mapWithFailure.gold b/SBVTestSuite/GoldFiles/mapWithFailure.gold
--- a/SBVTestSuite/GoldFiles/mapWithFailure.gold
+++ b/SBVTestSuite/GoldFiles/mapWithFailure.gold
@@ -26,7 +26,7 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s1 () Int (seq.len s0))
 [GOOD] (define-fun s3 () Bool (= s1 s2))
 [GOOD] (define-fun s5 () Int (seq.nth s0 s2))
@@ -177,6 +177,12 @@
 [GOOD] (define-fun s154 () Bool (not s3))
 [GOOD] (define-fun s155 () Bool (and s153 s154))
 [GOOD] (define-fun s156 () Bool (or s95 s155))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s156)
 [SEND] (check-sat)
 [RECV] sat
diff --git a/SBVTestSuite/GoldFiles/maxlWithFailure.gold b/SBVTestSuite/GoldFiles/maxlWithFailure.gold
--- a/SBVTestSuite/GoldFiles/maxlWithFailure.gold
+++ b/SBVTestSuite/GoldFiles/maxlWithFailure.gold
@@ -23,7 +23,7 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s1 () Int (seq.len s0))
 [GOOD] (define-fun s3 () Bool (= s1 s2))
 [GOOD] (define-fun s5 () Int (- s1 s4))
@@ -155,6 +155,12 @@
 [GOOD] (define-fun s132 () Bool (not s3))
 [GOOD] (define-fun s133 () Bool (and s131 s132))
 [GOOD] (define-fun s134 () Bool (or s83 s133))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s134)
 [SEND] (check-sat)
 [RECV] sat
diff --git a/SBVTestSuite/GoldFiles/maxrWithFailure.gold b/SBVTestSuite/GoldFiles/maxrWithFailure.gold
--- a/SBVTestSuite/GoldFiles/maxrWithFailure.gold
+++ b/SBVTestSuite/GoldFiles/maxrWithFailure.gold
@@ -23,7 +23,7 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s1 () Int (seq.len s0))
 [GOOD] (define-fun s3 () Bool (= s1 s2))
 [GOOD] (define-fun s4 () Int (seq.nth s0 s2))
@@ -164,6 +164,12 @@
 [GOOD] (define-fun s141 () Bool (not s3))
 [GOOD] (define-fun s142 () Bool (and s140 s141))
 [GOOD] (define-fun s143 () Bool (or s83 s142))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s143)
 [SEND] (check-sat)
 [RECV] sat
diff --git a/SBVTestSuite/GoldFiles/noOpt1.gold b/SBVTestSuite/GoldFiles/noOpt1.gold
--- a/SBVTestSuite/GoldFiles/noOpt1.gold
+++ b/SBVTestSuite/GoldFiles/noOpt1.gold
@@ -17,7 +17,13 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
+[GOOD] ; --- preQuantifier assignments ---
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
 [GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 
 
 
diff --git a/SBVTestSuite/GoldFiles/noOpt2.gold b/SBVTestSuite/GoldFiles/noOpt2.gold
--- a/SBVTestSuite/GoldFiles/noOpt2.gold
+++ b/SBVTestSuite/GoldFiles/noOpt2.gold
@@ -19,7 +19,13 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
+[GOOD] ; --- preQuantifier assignments ---
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
 [GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 
 
 
diff --git a/SBVTestSuite/GoldFiles/optExtField3.gold b/SBVTestSuite/GoldFiles/optExtField3.gold
--- a/SBVTestSuite/GoldFiles/optExtField3.gold
+++ b/SBVTestSuite/GoldFiles/optExtField3.gold
@@ -1,2 +1,4 @@
-Optimal in an extension field:
-  x_plus_y = 9.0 + (-3.0 * epsilon) :: Real
+Optimal model:
+  x        = 4.0 :: Real
+  y        = 5.0 :: Real
+  x_plus_y = 9.0 :: Real
diff --git a/SBVTestSuite/GoldFiles/pareto1.gold b/SBVTestSuite/GoldFiles/pareto1.gold
--- a/SBVTestSuite/GoldFiles/pareto1.gold
+++ b/SBVTestSuite/GoldFiles/pareto1.gold
@@ -23,158 +23,158 @@
   max_x_plus_y = 6 :: Integer
   min_y        = 4 :: Integer
 Pareto front #5: Optimal model:
+  x            = 1 :: Integer
+  y            = 4 :: Integer
+  min_x        = 1 :: Integer
+  max_x_plus_y = 5 :: Integer
+  min_y        = 4 :: Integer
+Pareto front #6: Optimal model:
   x            = 3 :: Integer
   y            = 4 :: Integer
   min_x        = 3 :: Integer
   max_x_plus_y = 7 :: Integer
   min_y        = 4 :: Integer
-Pareto front #6: Optimal model:
+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
-Pareto front #7: Optimal model:
+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
-Pareto front #8: Optimal model:
-  x            = 1 :: Integer
-  y            = 4 :: Integer
-  min_x        = 1 :: Integer
-  max_x_plus_y = 5 :: Integer
-  min_y        = 4 :: Integer
 Pareto front #9: Optimal model:
   x            = 3 :: Integer
-  y            = 2 :: Integer
+  y            = 3 :: Integer
   min_x        = 3 :: Integer
-  max_x_plus_y = 5 :: Integer
-  min_y        = 2 :: Integer
+  max_x_plus_y = 6 :: Integer
+  min_y        = 3 :: Integer
 Pareto front #10: Optimal model:
-  x            = 4 :: Integer
+  x            = 2 :: Integer
+  y            = 2 :: Integer
+  min_x        = 2 :: Integer
+  max_x_plus_y = 4 :: Integer
+  min_y        = 2 :: Integer
+Pareto front #11: Optimal model:
+  x            = 0 :: Integer
   y            = 1 :: Integer
-  min_x        = 4 :: Integer
-  max_x_plus_y = 5 :: Integer
+  min_x        = 0 :: Integer
+  max_x_plus_y = 1 :: Integer
   min_y        = 1 :: Integer
-Pareto front #11: Optimal model:
-  x            = 5 :: Integer
+Pareto front #12: Optimal model:
+  x            = 0 :: Integer
+  y            = 2 :: Integer
+  min_x        = 0 :: Integer
+  max_x_plus_y = 2 :: Integer
+  min_y        = 2 :: Integer
+Pareto front #13: Optimal model:
+  x            = 0 :: Integer
   y            = 0 :: Integer
-  min_x        = 5 :: Integer
-  max_x_plus_y = 5 :: Integer
+  min_x        = 0 :: Integer
+  max_x_plus_y = 0 :: Integer
   min_y        = 0 :: Integer
-Pareto front #12: Optimal model:
+Pareto front #14: Optimal model:
   x            = 2 :: Integer
-  y            = 3 :: Integer
+  y            = 1 :: Integer
   min_x        = 2 :: Integer
+  max_x_plus_y = 3 :: Integer
+  min_y        = 1 :: Integer
+Pareto front #15: Optimal model:
+  x            = 3 :: Integer
+  y            = 0 :: Integer
+  min_x        = 3 :: Integer
+  max_x_plus_y = 3 :: Integer
+  min_y        = 0 :: Integer
+Pareto front #16: Optimal model:
+  x            = 3 :: Integer
+  y            = 1 :: Integer
+  min_x        = 3 :: Integer
+  max_x_plus_y = 4 :: Integer
+  min_y        = 1 :: Integer
+Pareto front #17: Optimal model:
+  x            = 5 :: Integer
+  y            = 0 :: Integer
+  min_x        = 5 :: Integer
   max_x_plus_y = 5 :: Integer
-  min_y        = 3 :: Integer
-Pareto front #13: Optimal model:
+  min_y        = 0 :: Integer
+Pareto front #18: Optimal model:
   x            = 5 :: Integer
   y            = 1 :: Integer
   min_x        = 5 :: Integer
   max_x_plus_y = 6 :: Integer
   min_y        = 1 :: Integer
-Pareto front #14: Optimal model:
+Pareto front #19: Optimal model:
   x            = 4 :: Integer
-  y            = 2 :: Integer
+  y            = 1 :: Integer
   min_x        = 4 :: Integer
-  max_x_plus_y = 6 :: Integer
+  max_x_plus_y = 5 :: Integer
+  min_y        = 1 :: Integer
+Pareto front #20: Optimal model:
+  x            = 3 :: Integer
+  y            = 2 :: Integer
+  min_x        = 3 :: Integer
+  max_x_plus_y = 5 :: Integer
   min_y        = 2 :: Integer
-Pareto front #15: Optimal model:
-  x            = 4 :: Integer
+Pareto front #21: Optimal model:
+  x            = 2 :: Integer
   y            = 3 :: Integer
-  min_x        = 4 :: Integer
-  max_x_plus_y = 7 :: Integer
+  min_x        = 2 :: Integer
+  max_x_plus_y = 5 :: Integer
   min_y        = 3 :: Integer
-Pareto front #16: Optimal model:
+Pareto front #22: Optimal model:
+  x            = 4 :: Integer
+  y            = 2 :: Integer
+  min_x        = 4 :: Integer
+  max_x_plus_y = 6 :: Integer
+  min_y        = 2 :: Integer
+Pareto front #23: Optimal model:
   x            = 5 :: Integer
   y            = 2 :: Integer
   min_x        = 5 :: Integer
   max_x_plus_y = 7 :: Integer
   min_y        = 2 :: Integer
-Pareto front #17: Optimal model:
-  x            = 3 :: Integer
-  y            = 3 :: Integer
-  min_x        = 3 :: Integer
-  max_x_plus_y = 6 :: Integer
-  min_y        = 3 :: Integer
-Pareto front #18: Optimal model:
-  x            = 5 :: Integer
+Pareto front #24: Optimal model:
+  x            = 4 :: Integer
   y            = 3 :: Integer
-  min_x        = 5 :: Integer
-  max_x_plus_y = 8 :: Integer
+  min_x        = 4 :: Integer
+  max_x_plus_y = 7 :: Integer
   min_y        = 3 :: Integer
-Pareto front #19: Optimal model:
-  x            = 0 :: Integer
-  y            = 0 :: Integer
-  min_x        = 0 :: Integer
-  max_x_plus_y = 0 :: Integer
-  min_y        = 0 :: Integer
-Pareto front #20: Optimal model:
+Pareto front #25: Optimal model:
   x            = 1 :: Integer
   y            = 0 :: Integer
   min_x        = 1 :: Integer
   max_x_plus_y = 1 :: Integer
   min_y        = 0 :: Integer
-Pareto front #21: Optimal model:
-  x            = 0 :: Integer
-  y            = 1 :: Integer
-  min_x        = 0 :: Integer
-  max_x_plus_y = 1 :: Integer
-  min_y        = 1 :: Integer
-Pareto front #22: Optimal model:
+Pareto front #26: Optimal model:
   x            = 2 :: Integer
   y            = 0 :: Integer
   min_x        = 2 :: Integer
   max_x_plus_y = 2 :: Integer
   min_y        = 0 :: Integer
-Pareto front #23: Optimal model:
-  x            = 3 :: Integer
+Pareto front #27: Optimal model:
+  x            = 4 :: Integer
   y            = 0 :: Integer
-  min_x        = 3 :: Integer
-  max_x_plus_y = 3 :: Integer
-  min_y        = 0 :: Integer
-Pareto front #24: Optimal model:
-  x            = 2 :: Integer
-  y            = 1 :: Integer
-  min_x        = 2 :: Integer
-  max_x_plus_y = 3 :: Integer
-  min_y        = 1 :: Integer
-Pareto front #25: Optimal model:
-  x            = 3 :: Integer
-  y            = 1 :: Integer
-  min_x        = 3 :: Integer
+  min_x        = 4 :: Integer
   max_x_plus_y = 4 :: Integer
-  min_y        = 1 :: Integer
-Pareto front #26: Optimal model:
+  min_y        = 0 :: Integer
+Pareto front #28: Optimal model:
+  x            = 5 :: Integer
+  y            = 3 :: Integer
+  min_x        = 5 :: Integer
+  max_x_plus_y = 8 :: Integer
+  min_y        = 3 :: Integer
+Pareto front #29: Optimal model:
   x            = 1 :: Integer
   y            = 2 :: Integer
   min_x        = 1 :: Integer
   max_x_plus_y = 3 :: Integer
   min_y        = 2 :: Integer
-Pareto front #27: Optimal model:
+Pareto front #30: Optimal model:
   x            = 1 :: Integer
   y            = 3 :: Integer
   min_x        = 1 :: Integer
   max_x_plus_y = 4 :: Integer
   min_y        = 3 :: Integer
-Pareto front #28: Optimal model:
-  x            = 4 :: Integer
-  y            = 0 :: Integer
-  min_x        = 4 :: Integer
-  max_x_plus_y = 4 :: Integer
-  min_y        = 0 :: Integer
-Pareto front #29: Optimal model:
-  x            = 2 :: Integer
-  y            = 2 :: Integer
-  min_x        = 2 :: Integer
-  max_x_plus_y = 4 :: Integer
-  min_y        = 2 :: Integer
-Pareto front #30: Optimal model:
-  x            = 0 :: Integer
-  y            = 2 :: Integer
-  min_x        = 0 :: Integer
-  max_x_plus_y = 2 :: Integer
-  min_y        = 2 :: Integer
diff --git a/SBVTestSuite/GoldFiles/pareto2.gold b/SBVTestSuite/GoldFiles/pareto2.gold
--- a/SBVTestSuite/GoldFiles/pareto2.gold
+++ b/SBVTestSuite/GoldFiles/pareto2.gold
@@ -12,16 +12,16 @@
   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            = 4 :: Integer
   min_x        = 0 :: Integer
   max_y        = 4 :: Integer
   max_x_plus_y = 4 :: 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
@@ -30,153 +30,153 @@
   max_x_plus_y = 6 :: Integer
 Pareto front #6: Optimal model:
   x            = 0 :: Integer
-  y            = 7 :: Integer
+  y            = 3 :: Integer
   min_x        = 0 :: Integer
-  max_y        = 7 :: Integer
-  max_x_plus_y = 7 :: Integer
+  max_y        = 3 :: Integer
+  max_x_plus_y = 3 :: Integer
 Pareto front #7: Optimal model:
+  x            =  0 :: Integer
+  y            = -1 :: Integer
+  min_x        =  0 :: Integer
+  max_y        = -1 :: Integer
+  max_x_plus_y = -1 :: Integer
+Pareto front #8: Optimal model:
+  x            =  0 :: Integer
+  y            = -3 :: Integer
+  min_x        =  0 :: Integer
+  max_y        = -3 :: Integer
+  max_x_plus_y = -3 :: Integer
+Pareto front #9: Optimal model:
+  x            =  0 :: Integer
+  y            = -4 :: Integer
+  min_x        =  0 :: Integer
+  max_y        = -4 :: Integer
+  max_x_plus_y = -4 :: Integer
+Pareto front #10: Optimal model:
+  x            =  0 :: Integer
+  y            = -6 :: Integer
+  min_x        =  0 :: Integer
+  max_y        = -6 :: Integer
+  max_x_plus_y = -6 :: Integer
+Pareto front #11: Optimal model:
+  x            =  0 :: Integer
+  y            = -8 :: Integer
+  min_x        =  0 :: Integer
+  max_y        = -8 :: Integer
+  max_x_plus_y = -8 :: Integer
+Pareto front #12: Optimal model:
+  x            =  0 :: Integer
+  y            = -9 :: Integer
+  min_x        =  0 :: Integer
+  max_y        = -9 :: Integer
+  max_x_plus_y = -9 :: Integer
+Pareto front #13: Optimal model:
+  x            =   0 :: Integer
+  y            = -10 :: Integer
+  min_x        =   0 :: Integer
+  max_y        = -10 :: Integer
+  max_x_plus_y = -10 :: Integer
+Pareto front #14: Optimal model:
+  x            =   0 :: Integer
+  y            = -11 :: Integer
+  min_x        =   0 :: Integer
+  max_y        = -11 :: Integer
+  max_x_plus_y = -11 :: Integer
+Pareto front #15: Optimal model:
   x            = 0 :: Integer
+  y            = 8 :: Integer
+  min_x        = 0 :: Integer
+  max_y        = 8 :: Integer
+  max_x_plus_y = 8 :: Integer
+Pareto front #16: 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:
+Pareto front #17: Optimal model:
   x            =  0 :: Integer
-  y            = 10 :: Integer
+  y            = 11 :: Integer
   min_x        =  0 :: Integer
-  max_y        = 10 :: Integer
-  max_x_plus_y = 10 :: Integer
-Pareto front #9: Optimal model:
+  max_y        = 11 :: Integer
+  max_x_plus_y = 11 :: Integer
+Pareto front #18: Optimal model:
   x            =  0 :: Integer
   y            = 12 :: Integer
   min_x        =  0 :: Integer
   max_y        = 12 :: Integer
   max_x_plus_y = 12 :: Integer
-Pareto front #10: Optimal model:
+Pareto front #19: Optimal model:
   x            =  0 :: Integer
-  y            = 14 :: Integer
+  y            = 13 :: Integer
   min_x        =  0 :: Integer
-  max_y        = 14 :: Integer
-  max_x_plus_y = 14 :: Integer
-Pareto front #11: Optimal model:
+  max_y        = 13 :: Integer
+  max_x_plus_y = 13 :: Integer
+Pareto front #20: Optimal model:
   x            =  0 :: Integer
-  y            = 16 :: Integer
+  y            = 15 :: Integer
   min_x        =  0 :: Integer
-  max_y        = 16 :: Integer
-  max_x_plus_y = 16 :: Integer
-Pareto front #12: Optimal model:
+  max_y        = 15 :: Integer
+  max_x_plus_y = 15 :: Integer
+Pareto front #21: Optimal model:
   x            =  0 :: Integer
   y            = 17 :: Integer
   min_x        =  0 :: Integer
   max_y        = 17 :: Integer
   max_x_plus_y = 17 :: Integer
-Pareto front #13: Optimal model:
+Pareto front #22: Optimal model:
   x            =  0 :: Integer
   y            = 19 :: Integer
   min_x        =  0 :: Integer
   max_y        = 19 :: Integer
   max_x_plus_y = 19 :: Integer
-Pareto front #14: Optimal model:
+Pareto front #23: Optimal model:
   x            =  0 :: Integer
   y            = 21 :: Integer
   min_x        =  0 :: Integer
   max_y        = 21 :: Integer
   max_x_plus_y = 21 :: Integer
-Pareto front #15: Optimal model:
+Pareto front #24: Optimal model:
   x            =  0 :: Integer
   y            = 23 :: Integer
   min_x        =  0 :: Integer
   max_y        = 23 :: Integer
   max_x_plus_y = 23 :: Integer
-Pareto front #16: Optimal model:
+Pareto front #25: Optimal model:
   x            =  0 :: Integer
   y            = 25 :: Integer
   min_x        =  0 :: Integer
   max_y        = 25 :: Integer
   max_x_plus_y = 25 :: Integer
-Pareto front #17: Optimal model:
+Pareto front #26: Optimal model:
   x            =  0 :: Integer
   y            = 26 :: Integer
   min_x        =  0 :: Integer
   max_y        = 26 :: Integer
   max_x_plus_y = 26 :: Integer
-Pareto front #18: Optimal model:
+Pareto front #27: Optimal model:
   x            =  0 :: Integer
   y            = 27 :: Integer
   min_x        =  0 :: Integer
   max_y        = 27 :: Integer
   max_x_plus_y = 27 :: Integer
-Pareto front #19: Optimal model:
+Pareto front #28: Optimal model:
   x            =  0 :: Integer
   y            = 28 :: Integer
   min_x        =  0 :: Integer
   max_y        = 28 :: Integer
   max_x_plus_y = 28 :: Integer
-Pareto front #20: Optimal model:
-  x            =  0 :: Integer
-  y            = 30 :: Integer
-  min_x        =  0 :: Integer
-  max_y        = 30 :: Integer
-  max_x_plus_y = 30 :: Integer
-Pareto front #21: Optimal model:
-  x            =  0 :: Integer
-  y            = 32 :: Integer
-  min_x        =  0 :: Integer
-  max_y        = 32 :: Integer
-  max_x_plus_y = 32 :: 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
-Pareto front #23: Optimal model:
-  x            =  0 :: Integer
-  y            = 34 :: Integer
-  min_x        =  0 :: Integer
-  max_y        = 34 :: Integer
-  max_x_plus_y = 34 :: Integer
-Pareto front #24: Optimal model:
-  x            =  0 :: Integer
-  y            = 36 :: Integer
-  min_x        =  0 :: Integer
-  max_y        = 36 :: Integer
-  max_x_plus_y = 36 :: Integer
-Pareto front #25: Optimal model:
-  x            =  0 :: Integer
-  y            = 37 :: Integer
-  min_x        =  0 :: Integer
-  max_y        = 37 :: Integer
-  max_x_plus_y = 37 :: Integer
-Pareto front #26: Optimal model:
-  x            =  0 :: Integer
-  y            = 38 :: Integer
-  min_x        =  0 :: Integer
-  max_y        = 38 :: Integer
-  max_x_plus_y = 38 :: Integer
-Pareto front #27: Optimal model:
-  x            =  0 :: Integer
-  y            = 40 :: Integer
-  min_x        =  0 :: Integer
-  max_y        = 40 :: Integer
-  max_x_plus_y = 40 :: Integer
-Pareto front #28: Optimal model:
-  x            =  0 :: Integer
-  y            = 42 :: Integer
-  min_x        =  0 :: Integer
-  max_y        = 42 :: Integer
-  max_x_plus_y = 42 :: Integer
 Pareto front #29: Optimal model:
   x            =  0 :: Integer
-  y            = 43 :: Integer
+  y            = 29 :: Integer
   min_x        =  0 :: Integer
-  max_y        = 43 :: Integer
-  max_x_plus_y = 43 :: Integer
+  max_y        = 29 :: Integer
+  max_x_plus_y = 29 :: Integer
 Pareto front #30: Optimal model:
   x            =  0 :: Integer
-  y            = 44 :: Integer
+  y            = 31 :: Integer
   min_x        =  0 :: Integer
-  max_y        = 44 :: Integer
-  max_x_plus_y = 44 :: Integer
+  max_y        = 31 :: Integer
+  max_x_plus_y = 31 :: Integer
 *** Note: Pareto-front extraction was terminated as requested by the user.
 ***       There might be many other results!
diff --git a/SBVTestSuite/GoldFiles/pbAtLeast.gold b/SBVTestSuite/GoldFiles/pbAtLeast.gold
--- a/SBVTestSuite/GoldFiles/pbAtLeast.gold
+++ b/SBVTestSuite/GoldFiles/pbAtLeast.gold
@@ -29,7 +29,7 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s10 () Bool ((_ at-least 5) s0 s1 s2 s3 s4 s5 s6 s7 s8 s9))
 [GOOD] (define-fun s13 () (_ BitVec 32) (ite s0 s11 s12))
 [GOOD] (define-fun s14 () (_ BitVec 32) (ite s1 s11 s12))
@@ -53,6 +53,12 @@
 [GOOD] (define-fun s33 () Bool (bvuge s31 s32))
 [GOOD] (define-fun s34 () Bool (= s10 s33))
 [GOOD] (define-fun s35 () Bool (not s34))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s35)
 [SEND] (check-sat)
 [RECV] unsat
diff --git a/SBVTestSuite/GoldFiles/pbAtMost.gold b/SBVTestSuite/GoldFiles/pbAtMost.gold
--- a/SBVTestSuite/GoldFiles/pbAtMost.gold
+++ b/SBVTestSuite/GoldFiles/pbAtMost.gold
@@ -29,7 +29,7 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s10 () Bool ((_ at-most 8) s0 s1 s2 s3 s4 s5 s6 s7 s8 s9))
 [GOOD] (define-fun s13 () (_ BitVec 32) (ite s0 s11 s12))
 [GOOD] (define-fun s14 () (_ BitVec 32) (ite s1 s11 s12))
@@ -53,6 +53,12 @@
 [GOOD] (define-fun s33 () Bool (bvule s31 s32))
 [GOOD] (define-fun s34 () Bool (= s10 s33))
 [GOOD] (define-fun s35 () Bool (not s34))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s35)
 [SEND] (check-sat)
 [RECV] unsat
diff --git a/SBVTestSuite/GoldFiles/pbEq.gold b/SBVTestSuite/GoldFiles/pbEq.gold
--- a/SBVTestSuite/GoldFiles/pbEq.gold
+++ b/SBVTestSuite/GoldFiles/pbEq.gold
@@ -37,7 +37,7 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s10 () Bool ((_ pbeq 7 1 2 3 4 5 6 7 8 9 10) s0 s1 s2 s3 s4 s5 s6 s7 s8 s9))
 [GOOD] (define-fun s13 () Int (ite s0 s11 s12))
 [GOOD] (define-fun s15 () Int (ite s1 s14 s12))
@@ -61,6 +61,12 @@
 [GOOD] (define-fun s41 () Bool (= s29 s40))
 [GOOD] (define-fun s42 () Bool (= s10 s41))
 [GOOD] (define-fun s43 () Bool (not s42))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s43)
 [SEND] (check-sat)
 [RECV] unsat
diff --git a/SBVTestSuite/GoldFiles/pbEq2.gold b/SBVTestSuite/GoldFiles/pbEq2.gold
--- a/SBVTestSuite/GoldFiles/pbEq2.gold
+++ b/SBVTestSuite/GoldFiles/pbEq2.gold
@@ -26,7 +26,7 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s10 () Bool ((_ pbeq 3 1 1) s1 s2))
 [GOOD] (define-fun s11 () Bool ((_ pbeq 1 1 1) s1 s2))
 [GOOD] (define-fun s12 () Bool (ite s0 s10 s11))
@@ -50,6 +50,12 @@
 [GOOD] (define-fun s30 () Bool (or s24 s29))
 [GOOD] (define-fun s31 () Bool (or s17 s30))
 [GOOD] (define-fun s32 () Bool (not s31))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s32)
 [SEND] (check-sat)
 [RECV] unsat
diff --git a/SBVTestSuite/GoldFiles/pbExactly.gold b/SBVTestSuite/GoldFiles/pbExactly.gold
--- a/SBVTestSuite/GoldFiles/pbExactly.gold
+++ b/SBVTestSuite/GoldFiles/pbExactly.gold
@@ -29,7 +29,7 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s10 () Bool ((_ pbeq 5 1 1 1 1 1 1 1 1 1 1) s0 s1 s2 s3 s4 s5 s6 s7 s8 s9))
 [GOOD] (define-fun s13 () (_ BitVec 32) (ite s0 s11 s12))
 [GOOD] (define-fun s14 () (_ BitVec 32) (ite s1 s11 s12))
@@ -53,6 +53,12 @@
 [GOOD] (define-fun s33 () Bool (= s31 s32))
 [GOOD] (define-fun s34 () Bool (= s10 s33))
 [GOOD] (define-fun s35 () Bool (not s34))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s35)
 [SEND] (check-sat)
 [RECV] unsat
diff --git a/SBVTestSuite/GoldFiles/pbGe.gold b/SBVTestSuite/GoldFiles/pbGe.gold
--- a/SBVTestSuite/GoldFiles/pbGe.gold
+++ b/SBVTestSuite/GoldFiles/pbGe.gold
@@ -37,7 +37,7 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s10 () Bool ((_ pbge 7 1 2 3 4 5 6 7 8 9 10) s0 s1 s2 s3 s4 s5 s6 s7 s8 s9))
 [GOOD] (define-fun s13 () Int (ite s0 s11 s12))
 [GOOD] (define-fun s15 () Int (ite s1 s14 s12))
@@ -61,6 +61,12 @@
 [GOOD] (define-fun s41 () Bool (>= s40 s29))
 [GOOD] (define-fun s42 () Bool (= s10 s41))
 [GOOD] (define-fun s43 () Bool (not s42))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s43)
 [SEND] (check-sat)
 [RECV] unsat
diff --git a/SBVTestSuite/GoldFiles/pbLe.gold b/SBVTestSuite/GoldFiles/pbLe.gold
--- a/SBVTestSuite/GoldFiles/pbLe.gold
+++ b/SBVTestSuite/GoldFiles/pbLe.gold
@@ -37,7 +37,7 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s10 () Bool ((_ pble 7 1 2 3 4 5 6 7 8 9 10) s0 s1 s2 s3 s4 s5 s6 s7 s8 s9))
 [GOOD] (define-fun s13 () Int (ite s0 s11 s12))
 [GOOD] (define-fun s15 () Int (ite s1 s14 s12))
@@ -61,6 +61,12 @@
 [GOOD] (define-fun s41 () Bool (<= s40 s29))
 [GOOD] (define-fun s42 () Bool (= s10 s41))
 [GOOD] (define-fun s43 () Bool (not s42))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s43)
 [SEND] (check-sat)
 [RECV] unsat
diff --git a/SBVTestSuite/GoldFiles/pbMutexed.gold b/SBVTestSuite/GoldFiles/pbMutexed.gold
--- a/SBVTestSuite/GoldFiles/pbMutexed.gold
+++ b/SBVTestSuite/GoldFiles/pbMutexed.gold
@@ -28,7 +28,7 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s10 () Bool ((_ at-most 1) s0 s1 s2 s3 s4 s5 s6 s7 s8 s9))
 [GOOD] (define-fun s13 () (_ BitVec 32) (ite s0 s11 s12))
 [GOOD] (define-fun s14 () (_ BitVec 32) (ite s1 s11 s12))
@@ -52,6 +52,12 @@
 [GOOD] (define-fun s32 () Bool (bvule s31 s11))
 [GOOD] (define-fun s33 () Bool (= s10 s32))
 [GOOD] (define-fun s34 () Bool (not s33))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s34)
 [SEND] (check-sat)
 [RECV] unsat
diff --git a/SBVTestSuite/GoldFiles/pbStronglyMutexed.gold b/SBVTestSuite/GoldFiles/pbStronglyMutexed.gold
--- a/SBVTestSuite/GoldFiles/pbStronglyMutexed.gold
+++ b/SBVTestSuite/GoldFiles/pbStronglyMutexed.gold
@@ -28,7 +28,7 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s10 () Bool ((_ pbeq 1 1 1 1 1 1 1 1 1 1 1) s0 s1 s2 s3 s4 s5 s6 s7 s8 s9))
 [GOOD] (define-fun s13 () (_ BitVec 32) (ite s0 s11 s12))
 [GOOD] (define-fun s14 () (_ BitVec 32) (ite s1 s11 s12))
@@ -52,6 +52,12 @@
 [GOOD] (define-fun s32 () Bool (= s11 s31))
 [GOOD] (define-fun s33 () Bool (= s10 s32))
 [GOOD] (define-fun s34 () Bool (not s33))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s34)
 [SEND] (check-sat)
 [RECV] unsat
diff --git a/SBVTestSuite/GoldFiles/qEnum1.gold b/SBVTestSuite/GoldFiles/qEnum1.gold
--- a/SBVTestSuite/GoldFiles/qEnum1.gold
+++ b/SBVTestSuite/GoldFiles/qEnum1.gold
@@ -23,10 +23,16 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s3 () Bool (<= (BinOp_constrIndex s0) (BinOp_constrIndex s1)))
 [GOOD] (define-fun s4 () Bool (<= (BinOp_constrIndex s1) (BinOp_constrIndex s2)))
 [GOOD] (define-fun s5 () Bool (distinct s0 s1 s2))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s3)
 [GOOD] (assert s4)
 [GOOD] (assert s5)
diff --git a/SBVTestSuite/GoldFiles/qUninterp1.gold b/SBVTestSuite/GoldFiles/qUninterp1.gold
--- a/SBVTestSuite/GoldFiles/qUninterp1.gold
+++ b/SBVTestSuite/GoldFiles/qUninterp1.gold
@@ -21,7 +21,13 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
+[GOOD] ; --- preQuantifier assignments ---
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
 [GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [SEND] (check-sat)
 [RECV] sat
 [SEND] (get-value (s0))
diff --git a/SBVTestSuite/GoldFiles/quantified_prove_existsexists_contradiction_c.gold b/SBVTestSuite/GoldFiles/quantified_prove_existsexists_contradiction_c.gold
--- a/SBVTestSuite/GoldFiles/quantified_prove_existsexists_contradiction_c.gold
+++ b/SBVTestSuite/GoldFiles/quantified_prove_existsexists_contradiction_c.gold
@@ -16,12 +16,18 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
+[GOOD] ; --- preQuantifier assignments ---
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
 [GOOD] ; --- formula ---
 [GOOD] (assert (forall ((s0 (_ BitVec 8))
                         (s1 (_ BitVec 8)))
+       ; --- postQuantifier assignments ---
                    (let ((s2 (= s0 s1)))
                    (let ((s3 (distinct s0 s1)))
                    (let ((s4 (and s2 s3)))
+       ; --- delayedEqualities ---
+       ; -- finalAssert ---
                    false)))))
 [SEND] (check-sat)
 [RECV] unsat
diff --git a/SBVTestSuite/GoldFiles/quantified_prove_existsexists_contradiction_p.gold b/SBVTestSuite/GoldFiles/quantified_prove_existsexists_contradiction_p.gold
--- a/SBVTestSuite/GoldFiles/quantified_prove_existsexists_contradiction_p.gold
+++ b/SBVTestSuite/GoldFiles/quantified_prove_existsexists_contradiction_p.gold
@@ -16,12 +16,18 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
+[GOOD] ; --- preQuantifier assignments ---
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
 [GOOD] ; --- formula ---
 [GOOD] (assert (forall ((s0 (_ BitVec 8))
                         (s1 (_ BitVec 8)))
+       ; --- postQuantifier assignments ---
                    (let ((s2 (= s0 s1)))
                    (let ((s3 (distinct s0 s1)))
                    (let ((s4 (and s2 s3)))
+       ; --- delayedEqualities ---
+       ; -- finalAssert ---
                    (not s4))))))
 [SEND] (check-sat)
 [RECV] sat
diff --git a/SBVTestSuite/GoldFiles/quantified_prove_existsexists_satisfiable_c.gold b/SBVTestSuite/GoldFiles/quantified_prove_existsexists_satisfiable_c.gold
--- a/SBVTestSuite/GoldFiles/quantified_prove_existsexists_satisfiable_c.gold
+++ b/SBVTestSuite/GoldFiles/quantified_prove_existsexists_satisfiable_c.gold
@@ -17,11 +17,17 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
+[GOOD] ; --- preQuantifier assignments ---
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
 [GOOD] ; --- formula ---
 [GOOD] (assert (forall ((s0 (_ BitVec 8))
                         (s1 (_ BitVec 8)))
+       ; --- postQuantifier assignments ---
                    (let ((s3 (bvadd s1 s2)))
                    (let ((s4 (= s0 s3)))
+       ; --- delayedEqualities ---
+       ; -- finalAssert ---
                    false))))
 [SEND] (check-sat)
 [RECV] unsat
diff --git a/SBVTestSuite/GoldFiles/quantified_prove_existsexists_satisfiable_p.gold b/SBVTestSuite/GoldFiles/quantified_prove_existsexists_satisfiable_p.gold
--- a/SBVTestSuite/GoldFiles/quantified_prove_existsexists_satisfiable_p.gold
+++ b/SBVTestSuite/GoldFiles/quantified_prove_existsexists_satisfiable_p.gold
@@ -17,11 +17,17 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
+[GOOD] ; --- preQuantifier assignments ---
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
 [GOOD] ; --- formula ---
 [GOOD] (assert (forall ((s0 (_ BitVec 8))
                         (s1 (_ BitVec 8)))
+       ; --- postQuantifier assignments ---
                    (let ((s3 (bvadd s1 s2)))
                    (let ((s4 (= s0 s3)))
+       ; --- delayedEqualities ---
+       ; -- finalAssert ---
                    (not s4)))))
 [SEND] (check-sat)
 [RECV] unsat
diff --git a/SBVTestSuite/GoldFiles/quantified_prove_existsexists_thm_c.gold b/SBVTestSuite/GoldFiles/quantified_prove_existsexists_thm_c.gold
--- a/SBVTestSuite/GoldFiles/quantified_prove_existsexists_thm_c.gold
+++ b/SBVTestSuite/GoldFiles/quantified_prove_existsexists_thm_c.gold
@@ -16,12 +16,18 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
+[GOOD] ; --- preQuantifier assignments ---
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
 [GOOD] ; --- formula ---
 [GOOD] (assert (forall ((s0 (_ BitVec 8))
                         (s1 (_ BitVec 8)))
+       ; --- postQuantifier assignments ---
                    (let ((s2 (bvsub s1 s0)))
                    (let ((s3 (bvadd s0 s2)))
                    (let ((s4 (= s1 s3)))
+       ; --- delayedEqualities ---
+       ; -- finalAssert ---
                    false)))))
 [SEND] (check-sat)
 [RECV] unsat
diff --git a/SBVTestSuite/GoldFiles/quantified_prove_existsexists_thm_p.gold b/SBVTestSuite/GoldFiles/quantified_prove_existsexists_thm_p.gold
--- a/SBVTestSuite/GoldFiles/quantified_prove_existsexists_thm_p.gold
+++ b/SBVTestSuite/GoldFiles/quantified_prove_existsexists_thm_p.gold
@@ -16,12 +16,18 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
+[GOOD] ; --- preQuantifier assignments ---
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
 [GOOD] ; --- formula ---
 [GOOD] (assert (forall ((s0 (_ BitVec 8))
                         (s1 (_ BitVec 8)))
+       ; --- postQuantifier assignments ---
                    (let ((s2 (bvsub s1 s0)))
                    (let ((s3 (bvadd s0 s2)))
                    (let ((s4 (= s1 s3)))
+       ; --- delayedEqualities ---
+       ; -- finalAssert ---
                    (not s4))))))
 [SEND] (check-sat)
 [RECV] unsat
diff --git a/SBVTestSuite/GoldFiles/quantified_prove_existsforall_contradiction_c.gold b/SBVTestSuite/GoldFiles/quantified_prove_existsforall_contradiction_c.gold
--- a/SBVTestSuite/GoldFiles/quantified_prove_existsforall_contradiction_c.gold
+++ b/SBVTestSuite/GoldFiles/quantified_prove_existsforall_contradiction_c.gold
@@ -17,11 +17,17 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
+[GOOD] ; --- preQuantifier assignments ---
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
 [GOOD] ; --- formula ---
 [GOOD] (assert (forall ((s0 (_ BitVec 8)))
+       ; --- postQuantifier assignments ---
                    (let ((s2 (= s0 (s1 s0))))
                    (let ((s3 (distinct s0 (s1 s0))))
                    (let ((s4 (and s2 s3)))
+       ; --- delayedEqualities ---
+       ; -- finalAssert ---
                    false)))))
 [SEND] (check-sat)
 [RECV] unsat
diff --git a/SBVTestSuite/GoldFiles/quantified_prove_existsforall_contradiction_p.gold b/SBVTestSuite/GoldFiles/quantified_prove_existsforall_contradiction_p.gold
--- a/SBVTestSuite/GoldFiles/quantified_prove_existsforall_contradiction_p.gold
+++ b/SBVTestSuite/GoldFiles/quantified_prove_existsforall_contradiction_p.gold
@@ -17,11 +17,17 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
+[GOOD] ; --- preQuantifier assignments ---
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
 [GOOD] ; --- formula ---
 [GOOD] (assert (forall ((s0 (_ BitVec 8)))
+       ; --- postQuantifier assignments ---
                    (let ((s2 (= s0 (s1 s0))))
                    (let ((s3 (distinct s0 (s1 s0))))
                    (let ((s4 (and s2 s3)))
+       ; --- delayedEqualities ---
+       ; -- finalAssert ---
                    (not s4))))))
 [SEND] (check-sat)
 [RECV] sat
diff --git a/SBVTestSuite/GoldFiles/quantified_prove_existsforall_satisfiable_c.gold b/SBVTestSuite/GoldFiles/quantified_prove_existsforall_satisfiable_c.gold
--- a/SBVTestSuite/GoldFiles/quantified_prove_existsforall_satisfiable_c.gold
+++ b/SBVTestSuite/GoldFiles/quantified_prove_existsforall_satisfiable_c.gold
@@ -18,10 +18,16 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
+[GOOD] ; --- preQuantifier assignments ---
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
 [GOOD] ; --- formula ---
 [GOOD] (assert (forall ((s0 (_ BitVec 8)))
+       ; --- postQuantifier assignments ---
                    (let ((s3 (bvadd (s1 s0) s2)))
                    (let ((s4 (= s0 s3)))
+       ; --- delayedEqualities ---
+       ; -- finalAssert ---
                    false))))
 [SEND] (check-sat)
 [RECV] unsat
diff --git a/SBVTestSuite/GoldFiles/quantified_prove_existsforall_satisfiable_p.gold b/SBVTestSuite/GoldFiles/quantified_prove_existsforall_satisfiable_p.gold
--- a/SBVTestSuite/GoldFiles/quantified_prove_existsforall_satisfiable_p.gold
+++ b/SBVTestSuite/GoldFiles/quantified_prove_existsforall_satisfiable_p.gold
@@ -18,10 +18,16 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
+[GOOD] ; --- preQuantifier assignments ---
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
 [GOOD] ; --- formula ---
 [GOOD] (assert (forall ((s0 (_ BitVec 8)))
+       ; --- postQuantifier assignments ---
                    (let ((s3 (bvadd (s1 s0) s2)))
                    (let ((s4 (= s0 s3)))
+       ; --- delayedEqualities ---
+       ; -- finalAssert ---
                    (not s4)))))
 [SEND] (check-sat)
 [RECV] sat
diff --git a/SBVTestSuite/GoldFiles/quantified_prove_existsforall_thm_c.gold b/SBVTestSuite/GoldFiles/quantified_prove_existsforall_thm_c.gold
--- a/SBVTestSuite/GoldFiles/quantified_prove_existsforall_thm_c.gold
+++ b/SBVTestSuite/GoldFiles/quantified_prove_existsforall_thm_c.gold
@@ -17,11 +17,17 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
+[GOOD] ; --- preQuantifier assignments ---
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
 [GOOD] ; --- formula ---
 [GOOD] (assert (forall ((s0 (_ BitVec 8)))
+       ; --- postQuantifier assignments ---
                    (let ((s2 (bvsub (s1 s0) s0)))
                    (let ((s3 (bvadd s0 s2)))
                    (let ((s4 (= (s1 s0) s3)))
+       ; --- delayedEqualities ---
+       ; -- finalAssert ---
                    false)))))
 [SEND] (check-sat)
 [RECV] unsat
diff --git a/SBVTestSuite/GoldFiles/quantified_prove_existsforall_thm_p.gold b/SBVTestSuite/GoldFiles/quantified_prove_existsforall_thm_p.gold
--- a/SBVTestSuite/GoldFiles/quantified_prove_existsforall_thm_p.gold
+++ b/SBVTestSuite/GoldFiles/quantified_prove_existsforall_thm_p.gold
@@ -17,11 +17,17 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
+[GOOD] ; --- preQuantifier assignments ---
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
 [GOOD] ; --- formula ---
 [GOOD] (assert (forall ((s0 (_ BitVec 8)))
+       ; --- postQuantifier assignments ---
                    (let ((s2 (bvsub (s1 s0) s0)))
                    (let ((s3 (bvadd s0 s2)))
                    (let ((s4 (= (s1 s0) s3)))
+       ; --- delayedEqualities ---
+       ; -- finalAssert ---
                    (not s4))))))
 [SEND] (check-sat)
 [RECV] unsat
diff --git a/SBVTestSuite/GoldFiles/quantified_prove_forallexists_contradiction_c.gold b/SBVTestSuite/GoldFiles/quantified_prove_forallexists_contradiction_c.gold
--- a/SBVTestSuite/GoldFiles/quantified_prove_forallexists_contradiction_c.gold
+++ b/SBVTestSuite/GoldFiles/quantified_prove_forallexists_contradiction_c.gold
@@ -17,11 +17,17 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
+[GOOD] ; --- preQuantifier assignments ---
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
 [GOOD] ; --- formula ---
 [GOOD] (assert (forall ((s1 (_ BitVec 8)))
+       ; --- postQuantifier assignments ---
                    (let ((s2 (= s0 s1)))
                    (let ((s3 (distinct s0 s1)))
                    (let ((s4 (and s2 s3)))
+       ; --- delayedEqualities ---
+       ; -- finalAssert ---
                    false)))))
 [SEND] (check-sat)
 [RECV] unsat
diff --git a/SBVTestSuite/GoldFiles/quantified_prove_forallexists_contradiction_p.gold b/SBVTestSuite/GoldFiles/quantified_prove_forallexists_contradiction_p.gold
--- a/SBVTestSuite/GoldFiles/quantified_prove_forallexists_contradiction_p.gold
+++ b/SBVTestSuite/GoldFiles/quantified_prove_forallexists_contradiction_p.gold
@@ -17,11 +17,17 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
+[GOOD] ; --- preQuantifier assignments ---
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
 [GOOD] ; --- formula ---
 [GOOD] (assert (forall ((s1 (_ BitVec 8)))
+       ; --- postQuantifier assignments ---
                    (let ((s2 (= s0 s1)))
                    (let ((s3 (distinct s0 s1)))
                    (let ((s4 (and s2 s3)))
+       ; --- delayedEqualities ---
+       ; -- finalAssert ---
                    (not s4))))))
 [SEND] (check-sat)
 [RECV] sat
diff --git a/SBVTestSuite/GoldFiles/quantified_prove_forallexists_satisfiable_c.gold b/SBVTestSuite/GoldFiles/quantified_prove_forallexists_satisfiable_c.gold
--- a/SBVTestSuite/GoldFiles/quantified_prove_forallexists_satisfiable_c.gold
+++ b/SBVTestSuite/GoldFiles/quantified_prove_forallexists_satisfiable_c.gold
@@ -18,10 +18,16 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
+[GOOD] ; --- preQuantifier assignments ---
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
 [GOOD] ; --- formula ---
 [GOOD] (assert (forall ((s1 (_ BitVec 8)))
+       ; --- postQuantifier assignments ---
                    (let ((s3 (bvadd s1 s2)))
                    (let ((s4 (= s0 s3)))
+       ; --- delayedEqualities ---
+       ; -- finalAssert ---
                    false))))
 [SEND] (check-sat)
 [RECV] unsat
diff --git a/SBVTestSuite/GoldFiles/quantified_prove_forallexists_satisfiable_p.gold b/SBVTestSuite/GoldFiles/quantified_prove_forallexists_satisfiable_p.gold
--- a/SBVTestSuite/GoldFiles/quantified_prove_forallexists_satisfiable_p.gold
+++ b/SBVTestSuite/GoldFiles/quantified_prove_forallexists_satisfiable_p.gold
@@ -18,10 +18,16 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
+[GOOD] ; --- preQuantifier assignments ---
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
 [GOOD] ; --- formula ---
 [GOOD] (assert (forall ((s1 (_ BitVec 8)))
+       ; --- postQuantifier assignments ---
                    (let ((s3 (bvadd s1 s2)))
                    (let ((s4 (= s0 s3)))
+       ; --- delayedEqualities ---
+       ; -- finalAssert ---
                    (not s4)))))
 [SEND] (check-sat)
 [RECV] unsat
diff --git a/SBVTestSuite/GoldFiles/quantified_prove_forallexists_thm_c.gold b/SBVTestSuite/GoldFiles/quantified_prove_forallexists_thm_c.gold
--- a/SBVTestSuite/GoldFiles/quantified_prove_forallexists_thm_c.gold
+++ b/SBVTestSuite/GoldFiles/quantified_prove_forallexists_thm_c.gold
@@ -17,11 +17,17 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
+[GOOD] ; --- preQuantifier assignments ---
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
 [GOOD] ; --- formula ---
 [GOOD] (assert (forall ((s1 (_ BitVec 8)))
+       ; --- postQuantifier assignments ---
                    (let ((s2 (bvsub s1 s0)))
                    (let ((s3 (bvadd s0 s2)))
                    (let ((s4 (= s1 s3)))
+       ; --- delayedEqualities ---
+       ; -- finalAssert ---
                    false)))))
 [SEND] (check-sat)
 [RECV] unsat
diff --git a/SBVTestSuite/GoldFiles/quantified_prove_forallexists_thm_p.gold b/SBVTestSuite/GoldFiles/quantified_prove_forallexists_thm_p.gold
--- a/SBVTestSuite/GoldFiles/quantified_prove_forallexists_thm_p.gold
+++ b/SBVTestSuite/GoldFiles/quantified_prove_forallexists_thm_p.gold
@@ -17,11 +17,17 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
+[GOOD] ; --- preQuantifier assignments ---
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
 [GOOD] ; --- formula ---
 [GOOD] (assert (forall ((s1 (_ BitVec 8)))
+       ; --- postQuantifier assignments ---
                    (let ((s2 (bvsub s1 s0)))
                    (let ((s3 (bvadd s0 s2)))
                    (let ((s4 (= s1 s3)))
+       ; --- delayedEqualities ---
+       ; -- finalAssert ---
                    (not s4))))))
 [SEND] (check-sat)
 [RECV] unsat
diff --git a/SBVTestSuite/GoldFiles/quantified_prove_forallforall_contradiction_c.gold b/SBVTestSuite/GoldFiles/quantified_prove_forallforall_contradiction_c.gold
--- a/SBVTestSuite/GoldFiles/quantified_prove_forallforall_contradiction_c.gold
+++ b/SBVTestSuite/GoldFiles/quantified_prove_forallforall_contradiction_c.gold
@@ -18,10 +18,16 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s2 () Bool (= s0 s1))
 [GOOD] (define-fun s3 () Bool (distinct s0 s1))
 [GOOD] (define-fun s4 () Bool (and s2 s3))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s4)
 [GOOD] (assert false)
 [SEND] (check-sat)
diff --git a/SBVTestSuite/GoldFiles/quantified_prove_forallforall_contradiction_p.gold b/SBVTestSuite/GoldFiles/quantified_prove_forallforall_contradiction_p.gold
--- a/SBVTestSuite/GoldFiles/quantified_prove_forallforall_contradiction_p.gold
+++ b/SBVTestSuite/GoldFiles/quantified_prove_forallforall_contradiction_p.gold
@@ -18,10 +18,16 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s2 () Bool (= s0 s1))
 [GOOD] (define-fun s3 () Bool (distinct s0 s1))
 [GOOD] (define-fun s4 () Bool (and s2 s3))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert (not s4))
 [SEND] (check-sat)
 [RECV] sat
diff --git a/SBVTestSuite/GoldFiles/quantified_prove_forallforall_satisfiable_c.gold b/SBVTestSuite/GoldFiles/quantified_prove_forallforall_satisfiable_c.gold
--- a/SBVTestSuite/GoldFiles/quantified_prove_forallforall_satisfiable_c.gold
+++ b/SBVTestSuite/GoldFiles/quantified_prove_forallforall_satisfiable_c.gold
@@ -19,9 +19,15 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s3 () (_ BitVec 8) (bvadd s1 s2))
 [GOOD] (define-fun s4 () Bool (= s0 s3))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s4)
 [GOOD] (assert false)
 [SEND] (check-sat)
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
@@ -19,9 +19,15 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s3 () (_ BitVec 8) (bvadd s1 s2))
 [GOOD] (define-fun s4 () Bool (= s0 s3))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert (not s4))
 [SEND] (check-sat)
 [RECV] sat
diff --git a/SBVTestSuite/GoldFiles/quantified_prove_forallforall_thm_c.gold b/SBVTestSuite/GoldFiles/quantified_prove_forallforall_thm_c.gold
--- a/SBVTestSuite/GoldFiles/quantified_prove_forallforall_thm_c.gold
+++ b/SBVTestSuite/GoldFiles/quantified_prove_forallforall_thm_c.gold
@@ -18,10 +18,16 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s2 () (_ BitVec 8) (bvsub s1 s0))
 [GOOD] (define-fun s3 () (_ BitVec 8) (bvadd s0 s2))
 [GOOD] (define-fun s4 () Bool (= s1 s3))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s4)
 [GOOD] (assert false)
 [SEND] (check-sat)
diff --git a/SBVTestSuite/GoldFiles/quantified_prove_forallforall_thm_p.gold b/SBVTestSuite/GoldFiles/quantified_prove_forallforall_thm_p.gold
--- a/SBVTestSuite/GoldFiles/quantified_prove_forallforall_thm_p.gold
+++ b/SBVTestSuite/GoldFiles/quantified_prove_forallforall_thm_p.gold
@@ -18,10 +18,16 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s2 () (_ BitVec 8) (bvsub s1 s0))
 [GOOD] (define-fun s3 () (_ BitVec 8) (bvadd s0 s2))
 [GOOD] (define-fun s4 () Bool (= s1 s3))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert (not s4))
 [SEND] (check-sat)
 [RECV] unsat
diff --git a/SBVTestSuite/GoldFiles/quantified_sat_existsexists_contradiction_c.gold b/SBVTestSuite/GoldFiles/quantified_sat_existsexists_contradiction_c.gold
--- a/SBVTestSuite/GoldFiles/quantified_sat_existsexists_contradiction_c.gold
+++ b/SBVTestSuite/GoldFiles/quantified_sat_existsexists_contradiction_c.gold
@@ -18,10 +18,16 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s2 () Bool (= s0 s1))
 [GOOD] (define-fun s3 () Bool (distinct s0 s1))
 [GOOD] (define-fun s4 () Bool (and s2 s3))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s4)
 [SEND] (check-sat)
 [RECV] unsat
diff --git a/SBVTestSuite/GoldFiles/quantified_sat_existsexists_contradiction_p.gold b/SBVTestSuite/GoldFiles/quantified_sat_existsexists_contradiction_p.gold
--- a/SBVTestSuite/GoldFiles/quantified_sat_existsexists_contradiction_p.gold
+++ b/SBVTestSuite/GoldFiles/quantified_sat_existsexists_contradiction_p.gold
@@ -18,10 +18,16 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s2 () Bool (= s0 s1))
 [GOOD] (define-fun s3 () Bool (distinct s0 s1))
 [GOOD] (define-fun s4 () Bool (and s2 s3))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s4)
 [SEND] (check-sat)
 [RECV] unsat
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
@@ -19,9 +19,15 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s3 () (_ BitVec 8) (bvadd s1 s2))
 [GOOD] (define-fun s4 () Bool (= s0 s3))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s4)
 [SEND] (check-sat)
 [RECV] sat
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
@@ -19,9 +19,15 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s3 () (_ BitVec 8) (bvadd s1 s2))
 [GOOD] (define-fun s4 () Bool (= s0 s3))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s4)
 [SEND] (check-sat)
 [RECV] sat
diff --git a/SBVTestSuite/GoldFiles/quantified_sat_existsexists_thm_c.gold b/SBVTestSuite/GoldFiles/quantified_sat_existsexists_thm_c.gold
--- a/SBVTestSuite/GoldFiles/quantified_sat_existsexists_thm_c.gold
+++ b/SBVTestSuite/GoldFiles/quantified_sat_existsexists_thm_c.gold
@@ -18,10 +18,16 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s2 () (_ BitVec 8) (bvsub s1 s0))
 [GOOD] (define-fun s3 () (_ BitVec 8) (bvadd s0 s2))
 [GOOD] (define-fun s4 () Bool (= s1 s3))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s4)
 [SEND] (check-sat)
 [RECV] sat
diff --git a/SBVTestSuite/GoldFiles/quantified_sat_existsexists_thm_p.gold b/SBVTestSuite/GoldFiles/quantified_sat_existsexists_thm_p.gold
--- a/SBVTestSuite/GoldFiles/quantified_sat_existsexists_thm_p.gold
+++ b/SBVTestSuite/GoldFiles/quantified_sat_existsexists_thm_p.gold
@@ -18,10 +18,16 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s2 () (_ BitVec 8) (bvsub s1 s0))
 [GOOD] (define-fun s3 () (_ BitVec 8) (bvadd s0 s2))
 [GOOD] (define-fun s4 () Bool (= s1 s3))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s4)
 [SEND] (check-sat)
 [RECV] sat
diff --git a/SBVTestSuite/GoldFiles/quantified_sat_existsforall_contradiction_c.gold b/SBVTestSuite/GoldFiles/quantified_sat_existsforall_contradiction_c.gold
--- a/SBVTestSuite/GoldFiles/quantified_sat_existsforall_contradiction_c.gold
+++ b/SBVTestSuite/GoldFiles/quantified_sat_existsforall_contradiction_c.gold
@@ -17,11 +17,17 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
+[GOOD] ; --- preQuantifier assignments ---
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
 [GOOD] ; --- formula ---
 [GOOD] (assert (forall ((s1 (_ BitVec 8)))
+       ; --- postQuantifier assignments ---
                    (let ((s2 (= s0 s1)))
                    (let ((s3 (distinct s0 s1)))
                    (let ((s4 (and s2 s3)))
+       ; --- delayedEqualities ---
+       ; -- finalAssert ---
                    s4)))))
 [SEND] (check-sat)
 [RECV] unsat
diff --git a/SBVTestSuite/GoldFiles/quantified_sat_existsforall_contradiction_p.gold b/SBVTestSuite/GoldFiles/quantified_sat_existsforall_contradiction_p.gold
--- a/SBVTestSuite/GoldFiles/quantified_sat_existsforall_contradiction_p.gold
+++ b/SBVTestSuite/GoldFiles/quantified_sat_existsforall_contradiction_p.gold
@@ -17,11 +17,17 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
+[GOOD] ; --- preQuantifier assignments ---
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
 [GOOD] ; --- formula ---
 [GOOD] (assert (forall ((s1 (_ BitVec 8)))
+       ; --- postQuantifier assignments ---
                    (let ((s2 (= s0 s1)))
                    (let ((s3 (distinct s0 s1)))
                    (let ((s4 (and s2 s3)))
+       ; --- delayedEqualities ---
+       ; -- finalAssert ---
                    s4)))))
 [SEND] (check-sat)
 [RECV] unsat
diff --git a/SBVTestSuite/GoldFiles/quantified_sat_existsforall_satisfiable_c.gold b/SBVTestSuite/GoldFiles/quantified_sat_existsforall_satisfiable_c.gold
--- a/SBVTestSuite/GoldFiles/quantified_sat_existsforall_satisfiable_c.gold
+++ b/SBVTestSuite/GoldFiles/quantified_sat_existsforall_satisfiable_c.gold
@@ -18,10 +18,16 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
+[GOOD] ; --- preQuantifier assignments ---
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
 [GOOD] ; --- formula ---
 [GOOD] (assert (forall ((s1 (_ BitVec 8)))
+       ; --- postQuantifier assignments ---
                    (let ((s3 (bvadd s1 s2)))
                    (let ((s4 (= s0 s3)))
+       ; --- delayedEqualities ---
+       ; -- finalAssert ---
                    s4))))
 [SEND] (check-sat)
 [RECV] unsat
diff --git a/SBVTestSuite/GoldFiles/quantified_sat_existsforall_satisfiable_p.gold b/SBVTestSuite/GoldFiles/quantified_sat_existsforall_satisfiable_p.gold
--- a/SBVTestSuite/GoldFiles/quantified_sat_existsforall_satisfiable_p.gold
+++ b/SBVTestSuite/GoldFiles/quantified_sat_existsforall_satisfiable_p.gold
@@ -18,10 +18,16 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
+[GOOD] ; --- preQuantifier assignments ---
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
 [GOOD] ; --- formula ---
 [GOOD] (assert (forall ((s1 (_ BitVec 8)))
+       ; --- postQuantifier assignments ---
                    (let ((s3 (bvadd s1 s2)))
                    (let ((s4 (= s0 s3)))
+       ; --- delayedEqualities ---
+       ; -- finalAssert ---
                    s4))))
 [SEND] (check-sat)
 [RECV] unsat
diff --git a/SBVTestSuite/GoldFiles/quantified_sat_existsforall_thm_c.gold b/SBVTestSuite/GoldFiles/quantified_sat_existsforall_thm_c.gold
--- a/SBVTestSuite/GoldFiles/quantified_sat_existsforall_thm_c.gold
+++ b/SBVTestSuite/GoldFiles/quantified_sat_existsforall_thm_c.gold
@@ -17,11 +17,17 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
+[GOOD] ; --- preQuantifier assignments ---
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
 [GOOD] ; --- formula ---
 [GOOD] (assert (forall ((s1 (_ BitVec 8)))
+       ; --- postQuantifier assignments ---
                    (let ((s2 (bvsub s1 s0)))
                    (let ((s3 (bvadd s0 s2)))
                    (let ((s4 (= s1 s3)))
+       ; --- delayedEqualities ---
+       ; -- finalAssert ---
                    s4)))))
 [SEND] (check-sat)
 [RECV] sat
diff --git a/SBVTestSuite/GoldFiles/quantified_sat_existsforall_thm_p.gold b/SBVTestSuite/GoldFiles/quantified_sat_existsforall_thm_p.gold
--- a/SBVTestSuite/GoldFiles/quantified_sat_existsforall_thm_p.gold
+++ b/SBVTestSuite/GoldFiles/quantified_sat_existsforall_thm_p.gold
@@ -17,11 +17,17 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
+[GOOD] ; --- preQuantifier assignments ---
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
 [GOOD] ; --- formula ---
 [GOOD] (assert (forall ((s1 (_ BitVec 8)))
+       ; --- postQuantifier assignments ---
                    (let ((s2 (bvsub s1 s0)))
                    (let ((s3 (bvadd s0 s2)))
                    (let ((s4 (= s1 s3)))
+       ; --- delayedEqualities ---
+       ; -- finalAssert ---
                    s4)))))
 [SEND] (check-sat)
 [RECV] sat
diff --git a/SBVTestSuite/GoldFiles/quantified_sat_forallexists_contradiction_c.gold b/SBVTestSuite/GoldFiles/quantified_sat_forallexists_contradiction_c.gold
--- a/SBVTestSuite/GoldFiles/quantified_sat_forallexists_contradiction_c.gold
+++ b/SBVTestSuite/GoldFiles/quantified_sat_forallexists_contradiction_c.gold
@@ -17,11 +17,17 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
+[GOOD] ; --- preQuantifier assignments ---
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
 [GOOD] ; --- formula ---
 [GOOD] (assert (forall ((s0 (_ BitVec 8)))
+       ; --- postQuantifier assignments ---
                    (let ((s2 (= s0 (s1 s0))))
                    (let ((s3 (distinct s0 (s1 s0))))
                    (let ((s4 (and s2 s3)))
+       ; --- delayedEqualities ---
+       ; -- finalAssert ---
                    s4)))))
 [SEND] (check-sat)
 [RECV] unsat
diff --git a/SBVTestSuite/GoldFiles/quantified_sat_forallexists_contradiction_p.gold b/SBVTestSuite/GoldFiles/quantified_sat_forallexists_contradiction_p.gold
--- a/SBVTestSuite/GoldFiles/quantified_sat_forallexists_contradiction_p.gold
+++ b/SBVTestSuite/GoldFiles/quantified_sat_forallexists_contradiction_p.gold
@@ -17,11 +17,17 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
+[GOOD] ; --- preQuantifier assignments ---
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
 [GOOD] ; --- formula ---
 [GOOD] (assert (forall ((s0 (_ BitVec 8)))
+       ; --- postQuantifier assignments ---
                    (let ((s2 (= s0 (s1 s0))))
                    (let ((s3 (distinct s0 (s1 s0))))
                    (let ((s4 (and s2 s3)))
+       ; --- delayedEqualities ---
+       ; -- finalAssert ---
                    s4)))))
 [SEND] (check-sat)
 [RECV] unsat
diff --git a/SBVTestSuite/GoldFiles/quantified_sat_forallexists_satisfiable_c.gold b/SBVTestSuite/GoldFiles/quantified_sat_forallexists_satisfiable_c.gold
--- a/SBVTestSuite/GoldFiles/quantified_sat_forallexists_satisfiable_c.gold
+++ b/SBVTestSuite/GoldFiles/quantified_sat_forallexists_satisfiable_c.gold
@@ -18,10 +18,16 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
+[GOOD] ; --- preQuantifier assignments ---
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
 [GOOD] ; --- formula ---
 [GOOD] (assert (forall ((s0 (_ BitVec 8)))
+       ; --- postQuantifier assignments ---
                    (let ((s3 (bvadd (s1 s0) s2)))
                    (let ((s4 (= s0 s3)))
+       ; --- delayedEqualities ---
+       ; -- finalAssert ---
                    s4))))
 [SEND] (check-sat)
 [RECV] sat
diff --git a/SBVTestSuite/GoldFiles/quantified_sat_forallexists_satisfiable_p.gold b/SBVTestSuite/GoldFiles/quantified_sat_forallexists_satisfiable_p.gold
--- a/SBVTestSuite/GoldFiles/quantified_sat_forallexists_satisfiable_p.gold
+++ b/SBVTestSuite/GoldFiles/quantified_sat_forallexists_satisfiable_p.gold
@@ -18,10 +18,16 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
+[GOOD] ; --- preQuantifier assignments ---
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
 [GOOD] ; --- formula ---
 [GOOD] (assert (forall ((s0 (_ BitVec 8)))
+       ; --- postQuantifier assignments ---
                    (let ((s3 (bvadd (s1 s0) s2)))
                    (let ((s4 (= s0 s3)))
+       ; --- delayedEqualities ---
+       ; -- finalAssert ---
                    s4))))
 [SEND] (check-sat)
 [RECV] sat
diff --git a/SBVTestSuite/GoldFiles/quantified_sat_forallexists_thm_c.gold b/SBVTestSuite/GoldFiles/quantified_sat_forallexists_thm_c.gold
--- a/SBVTestSuite/GoldFiles/quantified_sat_forallexists_thm_c.gold
+++ b/SBVTestSuite/GoldFiles/quantified_sat_forallexists_thm_c.gold
@@ -17,11 +17,17 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
+[GOOD] ; --- preQuantifier assignments ---
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
 [GOOD] ; --- formula ---
 [GOOD] (assert (forall ((s0 (_ BitVec 8)))
+       ; --- postQuantifier assignments ---
                    (let ((s2 (bvsub (s1 s0) s0)))
                    (let ((s3 (bvadd s0 s2)))
                    (let ((s4 (= (s1 s0) s3)))
+       ; --- delayedEqualities ---
+       ; -- finalAssert ---
                    s4)))))
 [SEND] (check-sat)
 [RECV] sat
diff --git a/SBVTestSuite/GoldFiles/quantified_sat_forallexists_thm_p.gold b/SBVTestSuite/GoldFiles/quantified_sat_forallexists_thm_p.gold
--- a/SBVTestSuite/GoldFiles/quantified_sat_forallexists_thm_p.gold
+++ b/SBVTestSuite/GoldFiles/quantified_sat_forallexists_thm_p.gold
@@ -17,11 +17,17 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
+[GOOD] ; --- preQuantifier assignments ---
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
 [GOOD] ; --- formula ---
 [GOOD] (assert (forall ((s0 (_ BitVec 8)))
+       ; --- postQuantifier assignments ---
                    (let ((s2 (bvsub (s1 s0) s0)))
                    (let ((s3 (bvadd s0 s2)))
                    (let ((s4 (= (s1 s0) s3)))
+       ; --- delayedEqualities ---
+       ; -- finalAssert ---
                    s4)))))
 [SEND] (check-sat)
 [RECV] sat
diff --git a/SBVTestSuite/GoldFiles/quantified_sat_forallforall_contradiction_c.gold b/SBVTestSuite/GoldFiles/quantified_sat_forallforall_contradiction_c.gold
--- a/SBVTestSuite/GoldFiles/quantified_sat_forallforall_contradiction_c.gold
+++ b/SBVTestSuite/GoldFiles/quantified_sat_forallforall_contradiction_c.gold
@@ -16,12 +16,18 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
+[GOOD] ; --- preQuantifier assignments ---
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
 [GOOD] ; --- formula ---
 [GOOD] (assert (forall ((s0 (_ BitVec 8))
                         (s1 (_ BitVec 8)))
+       ; --- postQuantifier assignments ---
                    (let ((s2 (= s0 s1)))
                    (let ((s3 (distinct s0 s1)))
                    (let ((s4 (and s2 s3)))
+       ; --- delayedEqualities ---
+       ; -- finalAssert ---
                    s4)))))
 [SEND] (check-sat)
 [RECV] unsat
diff --git a/SBVTestSuite/GoldFiles/quantified_sat_forallforall_contradiction_p.gold b/SBVTestSuite/GoldFiles/quantified_sat_forallforall_contradiction_p.gold
--- a/SBVTestSuite/GoldFiles/quantified_sat_forallforall_contradiction_p.gold
+++ b/SBVTestSuite/GoldFiles/quantified_sat_forallforall_contradiction_p.gold
@@ -16,12 +16,18 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
+[GOOD] ; --- preQuantifier assignments ---
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
 [GOOD] ; --- formula ---
 [GOOD] (assert (forall ((s0 (_ BitVec 8))
                         (s1 (_ BitVec 8)))
+       ; --- postQuantifier assignments ---
                    (let ((s2 (= s0 s1)))
                    (let ((s3 (distinct s0 s1)))
                    (let ((s4 (and s2 s3)))
+       ; --- delayedEqualities ---
+       ; -- finalAssert ---
                    s4)))))
 [SEND] (check-sat)
 [RECV] unsat
diff --git a/SBVTestSuite/GoldFiles/quantified_sat_forallforall_satisfiable_c.gold b/SBVTestSuite/GoldFiles/quantified_sat_forallforall_satisfiable_c.gold
--- a/SBVTestSuite/GoldFiles/quantified_sat_forallforall_satisfiable_c.gold
+++ b/SBVTestSuite/GoldFiles/quantified_sat_forallforall_satisfiable_c.gold
@@ -17,11 +17,17 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
+[GOOD] ; --- preQuantifier assignments ---
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
 [GOOD] ; --- formula ---
 [GOOD] (assert (forall ((s0 (_ BitVec 8))
                         (s1 (_ BitVec 8)))
+       ; --- postQuantifier assignments ---
                    (let ((s3 (bvadd s1 s2)))
                    (let ((s4 (= s0 s3)))
+       ; --- delayedEqualities ---
+       ; -- finalAssert ---
                    s4))))
 [SEND] (check-sat)
 [RECV] unsat
diff --git a/SBVTestSuite/GoldFiles/quantified_sat_forallforall_satisfiable_p.gold b/SBVTestSuite/GoldFiles/quantified_sat_forallforall_satisfiable_p.gold
--- a/SBVTestSuite/GoldFiles/quantified_sat_forallforall_satisfiable_p.gold
+++ b/SBVTestSuite/GoldFiles/quantified_sat_forallforall_satisfiable_p.gold
@@ -17,11 +17,17 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
+[GOOD] ; --- preQuantifier assignments ---
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
 [GOOD] ; --- formula ---
 [GOOD] (assert (forall ((s0 (_ BitVec 8))
                         (s1 (_ BitVec 8)))
+       ; --- postQuantifier assignments ---
                    (let ((s3 (bvadd s1 s2)))
                    (let ((s4 (= s0 s3)))
+       ; --- delayedEqualities ---
+       ; -- finalAssert ---
                    s4))))
 [SEND] (check-sat)
 [RECV] unsat
diff --git a/SBVTestSuite/GoldFiles/quantified_sat_forallforall_thm_c.gold b/SBVTestSuite/GoldFiles/quantified_sat_forallforall_thm_c.gold
--- a/SBVTestSuite/GoldFiles/quantified_sat_forallforall_thm_c.gold
+++ b/SBVTestSuite/GoldFiles/quantified_sat_forallforall_thm_c.gold
@@ -16,12 +16,18 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
+[GOOD] ; --- preQuantifier assignments ---
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
 [GOOD] ; --- formula ---
 [GOOD] (assert (forall ((s0 (_ BitVec 8))
                         (s1 (_ BitVec 8)))
+       ; --- postQuantifier assignments ---
                    (let ((s2 (bvsub s1 s0)))
                    (let ((s3 (bvadd s0 s2)))
                    (let ((s4 (= s1 s3)))
+       ; --- delayedEqualities ---
+       ; -- finalAssert ---
                    s4)))))
 [SEND] (check-sat)
 [RECV] sat
diff --git a/SBVTestSuite/GoldFiles/quantified_sat_forallforall_thm_p.gold b/SBVTestSuite/GoldFiles/quantified_sat_forallforall_thm_p.gold
--- a/SBVTestSuite/GoldFiles/quantified_sat_forallforall_thm_p.gold
+++ b/SBVTestSuite/GoldFiles/quantified_sat_forallforall_thm_p.gold
@@ -16,12 +16,18 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
+[GOOD] ; --- preQuantifier assignments ---
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
 [GOOD] ; --- formula ---
 [GOOD] (assert (forall ((s0 (_ BitVec 8))
                         (s1 (_ BitVec 8)))
+       ; --- postQuantifier assignments ---
                    (let ((s2 (bvsub s1 s0)))
                    (let ((s3 (bvadd s0 s2)))
                    (let ((s4 (= s1 s3)))
+       ; --- delayedEqualities ---
+       ; -- finalAssert ---
                    s4)))))
 [SEND] (check-sat)
 [RECV] sat
diff --git a/SBVTestSuite/GoldFiles/query1.gold b/SBVTestSuite/GoldFiles/query1.gold
--- a/SBVTestSuite/GoldFiles/query1.gold
+++ b/SBVTestSuite/GoldFiles/query1.gold
@@ -32,9 +32,15 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s7 () Bool (> s0 s6))
 [GOOD] (define-fun s8 () Bool (> s1 s6))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert (! s7 :named |a > 0|))
 [GOOD] (assert s8)
 [GOOD] (define-fun s9 () Int 2)
diff --git a/SBVTestSuite/GoldFiles/queryArrays1.gold b/SBVTestSuite/GoldFiles/queryArrays1.gold
--- a/SBVTestSuite/GoldFiles/queryArrays1.gold
+++ b/SBVTestSuite/GoldFiles/queryArrays1.gold
@@ -20,9 +20,15 @@
 [GOOD] (declare-fun array_0 () (Array (_ BitVec 8) (_ BitVec 8)))
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s2 () Bool (distinct s0 s1))
-[GOOD] (define-fun array_0_initializer () Bool true) ; no initializiation needed
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] (define-fun array_0_initializer () Bool true) ; no initialization needed
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s2)
 [GOOD] (declare-fun array_1 () (Array (_ BitVec 8) (_ BitVec 8)))
 [GOOD] (define-fun s4 () (_ BitVec 8) (select array_1 s0))
diff --git a/SBVTestSuite/GoldFiles/queryArrays2.gold b/SBVTestSuite/GoldFiles/queryArrays2.gold
--- a/SBVTestSuite/GoldFiles/queryArrays2.gold
+++ b/SBVTestSuite/GoldFiles/queryArrays2.gold
@@ -17,7 +17,13 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
+[GOOD] ; --- preQuantifier assignments ---
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
 [GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (define-fun s1 () (_ BitVec 8) #x00)
 [GOOD] (define-fun s2 () (_ BitVec 8) #x01)
 [GOOD] (define-fun s3 () (_ BitVec 8) #x02)
diff --git a/SBVTestSuite/GoldFiles/queryArrays3.gold b/SBVTestSuite/GoldFiles/queryArrays3.gold
--- a/SBVTestSuite/GoldFiles/queryArrays3.gold
+++ b/SBVTestSuite/GoldFiles/queryArrays3.gold
@@ -17,7 +17,13 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
+[GOOD] ; --- preQuantifier assignments ---
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
 [GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (define-fun s1 () (_ BitVec 8) #x00)
 [GOOD] (declare-fun table0 ((_ BitVec 8)) (_ BitVec 8))
 [GOOD] (define-fun s2 () (_ BitVec 8) (table0 s0))
diff --git a/SBVTestSuite/GoldFiles/queryArrays4.gold b/SBVTestSuite/GoldFiles/queryArrays4.gold
--- a/SBVTestSuite/GoldFiles/queryArrays4.gold
+++ b/SBVTestSuite/GoldFiles/queryArrays4.gold
@@ -18,7 +18,13 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
+[GOOD] ; --- preQuantifier assignments ---
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
 [GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (define-fun s2 () (_ BitVec 8) #x00)
 [GOOD] (define-fun s3 () (_ BitVec 8) #x01)
 [GOOD] (define-fun s4 () (_ BitVec 8) #x02)
diff --git a/SBVTestSuite/GoldFiles/queryArrays5.gold b/SBVTestSuite/GoldFiles/queryArrays5.gold
--- a/SBVTestSuite/GoldFiles/queryArrays5.gold
+++ b/SBVTestSuite/GoldFiles/queryArrays5.gold
@@ -19,8 +19,14 @@
 [GOOD] (declare-fun array_0 () (Array (_ BitVec 8) (_ BitVec 8)))
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
+[GOOD] ; --- preQuantifier assignments ---
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] (define-fun array_0_initializer () Bool true) ; no initialization needed
 [GOOD] ; --- formula ---
-[GOOD] (define-fun array_0_initializer () Bool true) ; no initializiation needed
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (define-fun s2 () (_ BitVec 8) #x01)
 [GOOD] (define-fun s4 () (_ BitVec 8) #x01)
 [GOOD] (declare-fun array_1 () (Array (_ BitVec 8) (_ BitVec 8)))
diff --git a/SBVTestSuite/GoldFiles/queryArrays6.gold b/SBVTestSuite/GoldFiles/queryArrays6.gold
--- a/SBVTestSuite/GoldFiles/queryArrays6.gold
+++ b/SBVTestSuite/GoldFiles/queryArrays6.gold
@@ -17,8 +17,14 @@
 [GOOD] (declare-fun array_0 () (Array Int Int))
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
+[GOOD] ; --- preQuantifier assignments ---
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] (define-fun array_0_initializer () Bool true) ; no initialization needed
 [GOOD] ; --- formula ---
-[GOOD] (define-fun array_0_initializer () Bool true) ; no initializiation needed
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (push 1)
 [GOOD] (define-fun s0 () Int 1)
 [GOOD] (define-fun s2 () Int 5)
diff --git a/SBVTestSuite/GoldFiles/queryArrays7.gold b/SBVTestSuite/GoldFiles/queryArrays7.gold
--- a/SBVTestSuite/GoldFiles/queryArrays7.gold
+++ b/SBVTestSuite/GoldFiles/queryArrays7.gold
@@ -17,8 +17,14 @@
 [GOOD] (declare-fun array_0 () (Array Int Int))
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
+[GOOD] ; --- preQuantifier assignments ---
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] (define-fun array_0_initializer () Bool true) ; no initialization needed
 [GOOD] ; --- formula ---
-[GOOD] (define-fun array_0_initializer () Bool true) ; no initializiation needed
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (define-fun s0 () Int 0)
 [GOOD] (define-fun s1 () Int 1)
 [GOOD] (define-fun s3 () Int 2)
diff --git a/SBVTestSuite/GoldFiles/queryArrays8.gold b/SBVTestSuite/GoldFiles/queryArrays8.gold
--- a/SBVTestSuite/GoldFiles/queryArrays8.gold
+++ b/SBVTestSuite/GoldFiles/queryArrays8.gold
@@ -16,9 +16,15 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
+[GOOD] ; --- preQuantifier assignments ---
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
 [GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (declare-fun array_0 () (Array Int Int))
-[GOOD] (define-fun array_0_initializer () Bool true) ; no initializiation needed
+[GOOD] (define-fun array_0_initializer () Bool true) ; no initialization needed
 [GOOD] (define-fun s0 () Int 0)
 [GOOD] (define-fun s1 () Int 1)
 [GOOD] (define-fun s3 () Int 2)
diff --git a/SBVTestSuite/GoldFiles/queryTables.gold b/SBVTestSuite/GoldFiles/queryTables.gold
--- a/SBVTestSuite/GoldFiles/queryTables.gold
+++ b/SBVTestSuite/GoldFiles/queryTables.gold
@@ -16,7 +16,13 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
+[GOOD] ; --- preQuantifier assignments ---
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
 [GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (declare-fun s0 () (_ BitVec 16))
 [GOOD] (define-fun s1 () (_ BitVec 16) #x0000)
 [GOOD] (define-fun s3 () (_ BitVec 16) #x0001)
diff --git a/SBVTestSuite/GoldFiles/query_Chars1.gold b/SBVTestSuite/GoldFiles/query_Chars1.gold
--- a/SBVTestSuite/GoldFiles/query_Chars1.gold
+++ b/SBVTestSuite/GoldFiles/query_Chars1.gold
@@ -20,10 +20,16 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s1 () Int (str.to_code s0))
 [GOOD] (define-fun s3 () Bool (>= s1 s2))
 [GOOD] (define-fun s5 () Bool (< s1 s4))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s3)
 [GOOD] (assert s5)
 [SEND] (check-sat)
diff --git a/SBVTestSuite/GoldFiles/query_Interpolant1.gold b/SBVTestSuite/GoldFiles/query_Interpolant1.gold
--- a/SBVTestSuite/GoldFiles/query_Interpolant1.gold
+++ b/SBVTestSuite/GoldFiles/query_Interpolant1.gold
@@ -20,7 +20,7 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s4 () Bool (= s0 s1))
 [GOOD] (define-fun s5 () Bool (= s0 s2))
 [GOOD] (define-fun s6 () Bool (and s4 s5))
@@ -28,6 +28,12 @@
 [GOOD] (define-fun s8 () Bool (= s2 s3))
 [GOOD] (define-fun s9 () Bool (not s8))
 [GOOD] (define-fun s10 () Bool (and s7 s9))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert (! s6 :interpolation-group |c1|))
 [GOOD] (assert (! s10 :interpolation-group |c2|))
 [SEND] (check-sat)
diff --git a/SBVTestSuite/GoldFiles/query_Interpolant2.gold b/SBVTestSuite/GoldFiles/query_Interpolant2.gold
--- a/SBVTestSuite/GoldFiles/query_Interpolant2.gold
+++ b/SBVTestSuite/GoldFiles/query_Interpolant2.gold
@@ -22,7 +22,7 @@
 [GOOD] (declare-fun f (Int) Int)
 [GOOD] (declare-fun g (Int) Int)
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s4 () Int (f s0))
 [GOOD] (define-fun s5 () Bool (= s2 s4))
 [GOOD] (define-fun s6 () Int (f s1))
@@ -33,6 +33,12 @@
 [GOOD] (define-fun s11 () Int (g s3))
 [GOOD] (define-fun s12 () Bool (distinct s10 s11))
 [GOOD] (define-fun s13 () Bool (and s9 s12))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert (! s8 :interpolation-group |c1|))
 [GOOD] (assert (! s13 :interpolation-group |c2|))
 [SEND] (check-sat)
diff --git a/SBVTestSuite/GoldFiles/query_Interpolant3.gold b/SBVTestSuite/GoldFiles/query_Interpolant3.gold
--- a/SBVTestSuite/GoldFiles/query_Interpolant3.gold
+++ b/SBVTestSuite/GoldFiles/query_Interpolant3.gold
@@ -20,7 +20,13 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
+[GOOD] ; --- preQuantifier assignments ---
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
 [GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (define-fun s4 () Bool (= s0 s1))
 [GOOD] (define-fun s5 () Bool (= s0 s2))
 [GOOD] (define-fun s6 () Bool (and s4 s5))
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
@@ -20,7 +20,13 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
+[GOOD] ; --- preQuantifier assignments ---
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
 [GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (declare-fun f (Int) Int)
 [GOOD] (define-fun s4 () Int (f s0))
 [GOOD] (define-fun s5 () Bool (= s2 s4))
diff --git a/SBVTestSuite/GoldFiles/query_ListOfMaybe.gold b/SBVTestSuite/GoldFiles/query_ListOfMaybe.gold
--- a/SBVTestSuite/GoldFiles/query_ListOfMaybe.gold
+++ b/SBVTestSuite/GoldFiles/query_ListOfMaybe.gold
@@ -27,7 +27,7 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s1 () Int (seq.len s0))
 [GOOD] (define-fun s3 () Bool (= s1 s2))
 [GOOD] (define-fun s5 () (SBVMaybe String) (seq.nth s0 s4))
@@ -38,6 +38,12 @@
 [GOOD] (define-fun s11 () (SBVMaybe String) (seq.nth s10 s4))
 [GOOD] (define-fun s12 () Bool ((_ is (nothing_SBVMaybe () (SBVMaybe String))) s11))
 [GOOD] (define-fun s13 () Bool (ite s12 true false))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s3)
 [GOOD] (assert s7)
 [GOOD] (assert s13)
diff --git a/SBVTestSuite/GoldFiles/query_ListOfSum.gold b/SBVTestSuite/GoldFiles/query_ListOfSum.gold
--- a/SBVTestSuite/GoldFiles/query_ListOfSum.gold
+++ b/SBVTestSuite/GoldFiles/query_ListOfSum.gold
@@ -27,7 +27,7 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s1 () Int (seq.len s0))
 [GOOD] (define-fun s3 () Bool (= s1 s2))
 [GOOD] (define-fun s5 () (SBVEither Int String) (seq.nth s0 s4))
@@ -38,6 +38,12 @@
 [GOOD] (define-fun s11 () (SBVEither Int String) (seq.nth s10 s4))
 [GOOD] (define-fun s12 () Bool ((_ is (left_SBVEither (Int) (SBVEither Int String))) s11))
 [GOOD] (define-fun s13 () Bool (ite s12 false true))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s3)
 [GOOD] (assert s7)
 [GOOD] (assert s13)
diff --git a/SBVTestSuite/GoldFiles/query_Lists1.gold b/SBVTestSuite/GoldFiles/query_Lists1.gold
--- a/SBVTestSuite/GoldFiles/query_Lists1.gold
+++ b/SBVTestSuite/GoldFiles/query_Lists1.gold
@@ -21,8 +21,14 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s2 () Bool (= s0 s1))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s2)
 [SEND] (check-sat)
 [RECV] sat
diff --git a/SBVTestSuite/GoldFiles/query_Maybe.gold b/SBVTestSuite/GoldFiles/query_Maybe.gold
--- a/SBVTestSuite/GoldFiles/query_Maybe.gold
+++ b/SBVTestSuite/GoldFiles/query_Maybe.gold
@@ -24,11 +24,17 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s1 () Int (get_just_SBVMaybe s0))
 [GOOD] (define-fun s3 () Bool (= s1 s2))
 [GOOD] (define-fun s4 () Bool ((_ is (nothing_SBVMaybe () (SBVMaybe Int))) s0))
 [GOOD] (define-fun s5 () Bool (ite s4 false s3))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s5)
 [SEND] (check-sat)
 [RECV] sat
diff --git a/SBVTestSuite/GoldFiles/query_Strings1.gold b/SBVTestSuite/GoldFiles/query_Strings1.gold
--- a/SBVTestSuite/GoldFiles/query_Strings1.gold
+++ b/SBVTestSuite/GoldFiles/query_Strings1.gold
@@ -17,8 +17,14 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s1 () Bool (str.in.re s0 ((_ re.loop 5 5) (str.to.re "xyz"))))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s1)
 [SEND] (check-sat)
 [RECV] sat
diff --git a/SBVTestSuite/GoldFiles/query_SumMaybeBoth.gold b/SBVTestSuite/GoldFiles/query_SumMaybeBoth.gold
--- a/SBVTestSuite/GoldFiles/query_SumMaybeBoth.gold
+++ b/SBVTestSuite/GoldFiles/query_SumMaybeBoth.gold
@@ -16,7 +16,13 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
+[GOOD] ; --- preQuantifier assignments ---
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
 [GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (set-option :pp.max_depth      4294967295)
 [GOOD] (set-option :pp.min_alias_size 4294967295)
 [GOOD] (set-option :model.inline_def  true      )
diff --git a/SBVTestSuite/GoldFiles/query_Sums.gold b/SBVTestSuite/GoldFiles/query_Sums.gold
--- a/SBVTestSuite/GoldFiles/query_Sums.gold
+++ b/SBVTestSuite/GoldFiles/query_Sums.gold
@@ -25,11 +25,17 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s1 () Int (get_left_SBVEither s0))
 [GOOD] (define-fun s3 () Bool (= s1 s2))
 [GOOD] (define-fun s4 () Bool ((_ is (left_SBVEither (Int) (SBVEither Int String))) s0))
 [GOOD] (define-fun s5 () Bool (ite s4 s3 false))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s5)
 [SEND] (check-sat)
 [RECV] sat
diff --git a/SBVTestSuite/GoldFiles/query_Tuples1.gold b/SBVTestSuite/GoldFiles/query_Tuples1.gold
--- a/SBVTestSuite/GoldFiles/query_Tuples1.gold
+++ b/SBVTestSuite/GoldFiles/query_Tuples1.gold
@@ -25,9 +25,15 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s1 () Int (proj_1_SBVTuple2 s0))
 [GOOD] (define-fun s3 () Bool (= s1 s2))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s3)
 [SEND] (check-sat)
 [RECV] sat
diff --git a/SBVTestSuite/GoldFiles/query_Tuples2.gold b/SBVTestSuite/GoldFiles/query_Tuples2.gold
--- a/SBVTestSuite/GoldFiles/query_Tuples2.gold
+++ b/SBVTestSuite/GoldFiles/query_Tuples2.gold
@@ -26,10 +26,16 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s1 () (SBVTuple2 String SBVTuple0) (proj_2_SBVTuple2 s0))
 [GOOD] (define-fun s2 () String (proj_1_SBVTuple2 s1))
 [GOOD] (define-fun s4 () Bool (= s2 s3))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s4)
 [SEND] (check-sat)
 [RECV] sat
diff --git a/SBVTestSuite/GoldFiles/query_abc.gold b/SBVTestSuite/GoldFiles/query_abc.gold
--- a/SBVTestSuite/GoldFiles/query_abc.gold
+++ b/SBVTestSuite/GoldFiles/query_abc.gold
@@ -19,9 +19,15 @@
 [ISSUE] ; --- arrays ---
 [ISSUE] ; --- uninterpreted constants ---
 [ISSUE] ; --- user given axioms ---
-[ISSUE] ; --- formula ---
+[ISSUE] ; --- preQuantifier assignments ---
 [ISSUE] (define-fun s3 () Bool (bvsgt s0 s2))
 [ISSUE] (define-fun s4 () Bool (bvsgt s1 s2))
+[ISSUE] ; --- arrayDelayeds ---
+[ISSUE] ; --- arraySetups ---
+[ISSUE] ; --- formula ---
+[ISSUE] ; --- postQuantifier assignments ---
+[ISSUE] ; --- delayedEqualities ---
+[ISSUE] ; -- finalAssert ---
 [ISSUE] (assert s3)
 [ISSUE] (assert s4)
 [FIRE] (define-fun s5 () (_ BitVec 32) #x00000002)
diff --git a/SBVTestSuite/GoldFiles/query_boolector.gold b/SBVTestSuite/GoldFiles/query_boolector.gold
--- a/SBVTestSuite/GoldFiles/query_boolector.gold
+++ b/SBVTestSuite/GoldFiles/query_boolector.gold
@@ -1,4 +1,4 @@
-** Calling: boolector --smt2 --smt2-model --no-exit-codes --incremental
+** Calling: boolector --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)
@@ -17,9 +17,15 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[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)
@@ -51,3 +57,7 @@
 [RECV] ((s1 #b00000000000000000000000000000001))
 *** Solver   : Boolector
 *** Exit code: ExitSuccess
+*** Std-out  : (
+             (define-fun s0 () (_ BitVec 32) #b00000000000000000000000000000001)
+             (define-fun s1 () (_ BitVec 32) #b00000000000000000000000000000001)
+           )
diff --git a/SBVTestSuite/GoldFiles/query_cvc4.gold b/SBVTestSuite/GoldFiles/query_cvc4.gold
--- a/SBVTestSuite/GoldFiles/query_cvc4.gold
+++ b/SBVTestSuite/GoldFiles/query_cvc4.gold
@@ -18,9 +18,15 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[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)
diff --git a/SBVTestSuite/GoldFiles/query_mathsat.gold b/SBVTestSuite/GoldFiles/query_mathsat.gold
--- a/SBVTestSuite/GoldFiles/query_mathsat.gold
+++ b/SBVTestSuite/GoldFiles/query_mathsat.gold
@@ -18,9 +18,15 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[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)
diff --git a/SBVTestSuite/GoldFiles/query_sumMergeEither1.gold b/SBVTestSuite/GoldFiles/query_sumMergeEither1.gold
--- a/SBVTestSuite/GoldFiles/query_sumMergeEither1.gold
+++ b/SBVTestSuite/GoldFiles/query_sumMergeEither1.gold
@@ -16,7 +16,13 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
+[GOOD] ; --- preQuantifier assignments ---
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
 [GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (set-option :pp.max_depth      4294967295)
 [GOOD] (set-option :pp.min_alias_size 4294967295)
 [GOOD] (set-option :model.inline_def  true      )
diff --git a/SBVTestSuite/GoldFiles/query_sumMergeEither2.gold b/SBVTestSuite/GoldFiles/query_sumMergeEither2.gold
--- a/SBVTestSuite/GoldFiles/query_sumMergeEither2.gold
+++ b/SBVTestSuite/GoldFiles/query_sumMergeEither2.gold
@@ -16,7 +16,13 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
+[GOOD] ; --- preQuantifier assignments ---
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
 [GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (set-option :pp.max_depth      4294967295)
 [GOOD] (set-option :pp.min_alias_size 4294967295)
 [GOOD] (set-option :model.inline_def  true      )
diff --git a/SBVTestSuite/GoldFiles/query_sumMergeMaybe1.gold b/SBVTestSuite/GoldFiles/query_sumMergeMaybe1.gold
--- a/SBVTestSuite/GoldFiles/query_sumMergeMaybe1.gold
+++ b/SBVTestSuite/GoldFiles/query_sumMergeMaybe1.gold
@@ -16,7 +16,13 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
+[GOOD] ; --- preQuantifier assignments ---
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
 [GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (set-option :pp.max_depth      4294967295)
 [GOOD] (set-option :pp.min_alias_size 4294967295)
 [GOOD] (set-option :model.inline_def  true      )
diff --git a/SBVTestSuite/GoldFiles/query_sumMergeMaybe2.gold b/SBVTestSuite/GoldFiles/query_sumMergeMaybe2.gold
--- a/SBVTestSuite/GoldFiles/query_sumMergeMaybe2.gold
+++ b/SBVTestSuite/GoldFiles/query_sumMergeMaybe2.gold
@@ -16,7 +16,13 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
+[GOOD] ; --- preQuantifier assignments ---
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
 [GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (set-option :pp.max_depth      4294967295)
 [GOOD] (set-option :pp.min_alias_size 4294967295)
 [GOOD] (set-option :model.inline_def  true      )
diff --git a/SBVTestSuite/GoldFiles/query_uiSat_test1.gold b/SBVTestSuite/GoldFiles/query_uiSat_test1.gold
--- a/SBVTestSuite/GoldFiles/query_uiSat_test1.gold
+++ b/SBVTestSuite/GoldFiles/query_uiSat_test1.gold
@@ -17,10 +17,16 @@
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] (declare-fun q1 (Bool) Bool)
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s0 () Bool (q1 false))
 [GOOD] (define-fun s1 () Bool (= false s0))
 [GOOD] (define-fun s2 () Bool (q1 true))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s1)
 [GOOD] (assert s2)
 [SEND] (check-sat)
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
@@ -17,11 +17,17 @@
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] (declare-fun q2 (Bool Bool) Bool)
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s0 () Bool (q2 false true))
 [GOOD] (define-fun s1 () Bool (= false s0))
 [GOOD] (define-fun s2 () Bool (q2 true true))
 [GOOD] (define-fun s3 () Bool (q2 true false))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s1)
 [GOOD] (assert s2)
 [GOOD] (assert s3)
diff --git a/SBVTestSuite/GoldFiles/query_uisatex1.gold b/SBVTestSuite/GoldFiles/query_uisatex1.gold
--- a/SBVTestSuite/GoldFiles/query_uisatex1.gold
+++ b/SBVTestSuite/GoldFiles/query_uisatex1.gold
@@ -57,7 +57,7 @@
 [GOOD] (declare-fun q4 (String String) (_ FloatingPoint  8 24))
 [GOOD] (declare-fun q5 ((Seq Int) (Seq (_ FloatingPoint  8 24))) Int)
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s2 () Int (q1 s1))
 [GOOD] (define-fun s4 () Bool (= s2 s3))
 [GOOD] (define-fun s6 () Int (q1 s5))
@@ -94,6 +94,12 @@
 [GOOD] (define-fun s63 () Bool (= s61 s62))
 [GOOD] (define-fun s66 () Int (q5 s64 s65))
 [GOOD] (define-fun s68 () Bool (= s66 s67))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s4)
 [GOOD] (assert s8)
 [GOOD] (assert s12)
diff --git a/SBVTestSuite/GoldFiles/query_uisatex2.gold b/SBVTestSuite/GoldFiles/query_uisatex2.gold
--- a/SBVTestSuite/GoldFiles/query_uisatex2.gold
+++ b/SBVTestSuite/GoldFiles/query_uisatex2.gold
@@ -58,7 +58,7 @@
 [GOOD] (declare-fun q5 ((Seq Int) (Seq (_ FloatingPoint  8 24))) Int)
 [GOOD] (declare-fun q6 (Int) Bool)
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s2 () Int (q1 s1))
 [GOOD] (define-fun s4 () Bool (= s2 s3))
 [GOOD] (define-fun s6 () Int (q1 s5))
@@ -98,6 +98,12 @@
 [GOOD] (define-fun s69 () Bool (q6 s17))
 [GOOD] (define-fun s70 () Bool (not s69))
 [GOOD] (define-fun s71 () Bool (or s69 s70))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s4)
 [GOOD] (assert s8)
 [GOOD] (assert s12)
diff --git a/SBVTestSuite/GoldFiles/query_yices.gold b/SBVTestSuite/GoldFiles/query_yices.gold
--- a/SBVTestSuite/GoldFiles/query_yices.gold
+++ b/SBVTestSuite/GoldFiles/query_yices.gold
@@ -17,9 +17,15 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[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)
diff --git a/SBVTestSuite/GoldFiles/query_z3.gold b/SBVTestSuite/GoldFiles/query_z3.gold
--- a/SBVTestSuite/GoldFiles/query_z3.gold
+++ b/SBVTestSuite/GoldFiles/query_z3.gold
@@ -19,9 +19,15 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[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)
diff --git a/SBVTestSuite/GoldFiles/reverse.gold b/SBVTestSuite/GoldFiles/reverse.gold
--- a/SBVTestSuite/GoldFiles/reverse.gold
+++ b/SBVTestSuite/GoldFiles/reverse.gold
@@ -26,7 +26,7 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s4 () (Seq Int) (seq.unit s0))
 [GOOD] (define-fun s5 () (Seq Int) (seq.unit s1))
 [GOOD] (define-fun s6 () (Seq Int) (seq.unit s2))
@@ -115,6 +115,12 @@
 [GOOD] (define-fun s92 () (Seq Int) (seq.++ s6 s91))
 [GOOD] (define-fun s93 () (Seq Int) (seq.++ s7 s92))
 [GOOD] (define-fun s94 () Bool (= s90 s93))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s94)
 [SEND] (check-sat)
 [RECV] sat
diff --git a/SBVTestSuite/GoldFiles/reverseAlt10.gold b/SBVTestSuite/GoldFiles/reverseAlt10.gold
--- a/SBVTestSuite/GoldFiles/reverseAlt10.gold
+++ b/SBVTestSuite/GoldFiles/reverseAlt10.gold
@@ -23,7 +23,7 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s1 () Int (seq.len s0))
 [GOOD] (define-fun s3 () Bool (= s1 s2))
 [GOOD] (define-fun s6 () Int (- s1 s5))
@@ -121,6 +121,12 @@
 [GOOD] (define-fun s98 () (Seq Int) (ite s9 s78 s97))
 [GOOD] (define-fun s99 () (Seq Int) (ite s3 s4 s98))
 [GOOD] (define-fun s100 () Bool (distinct s80 s99))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s100)
 [SEND] (check-sat)
 [RECV] unsat
diff --git a/SBVTestSuite/GoldFiles/safe1.gold b/SBVTestSuite/GoldFiles/safe1.gold
--- a/SBVTestSuite/GoldFiles/safe1.gold
+++ b/SBVTestSuite/GoldFiles/safe1.gold
@@ -19,10 +19,16 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s2 () Bool (= s0 s1))
 [GOOD] (define-fun s4 () Bool (> s0 s3))
 [GOOD] (define-fun s5 () Bool (not s4))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (push 1)
 [GOOD] (assert s5)
 [SEND] (check-sat)
diff --git a/SBVTestSuite/GoldFiles/safe2.gold b/SBVTestSuite/GoldFiles/safe2.gold
--- a/SBVTestSuite/GoldFiles/safe2.gold
+++ b/SBVTestSuite/GoldFiles/safe2.gold
@@ -19,9 +19,15 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s3 () Bool (> s0 s2))
 [GOOD] (define-fun s4 () Bool (not s3))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (push 1)
 [GOOD] (assert s4)
 [SEND] (check-sat)
diff --git a/SBVTestSuite/GoldFiles/seqConcat.gold b/SBVTestSuite/GoldFiles/seqConcat.gold
--- a/SBVTestSuite/GoldFiles/seqConcat.gold
+++ b/SBVTestSuite/GoldFiles/seqConcat.gold
@@ -16,7 +16,13 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
+[GOOD] ; --- preQuantifier assignments ---
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
 [GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [SEND] (check-sat)
 [RECV] sat
 *** Solver   : Z3
diff --git a/SBVTestSuite/GoldFiles/seqConcatBad.gold b/SBVTestSuite/GoldFiles/seqConcatBad.gold
--- a/SBVTestSuite/GoldFiles/seqConcatBad.gold
+++ b/SBVTestSuite/GoldFiles/seqConcatBad.gold
@@ -16,7 +16,13 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
+[GOOD] ; --- preQuantifier assignments ---
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
 [GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert false)
 [SEND] (check-sat)
 [RECV] unsat
diff --git a/SBVTestSuite/GoldFiles/seqExamples1.gold b/SBVTestSuite/GoldFiles/seqExamples1.gold
--- a/SBVTestSuite/GoldFiles/seqExamples1.gold
+++ b/SBVTestSuite/GoldFiles/seqExamples1.gold
@@ -16,7 +16,13 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
+[GOOD] ; --- preQuantifier assignments ---
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
 [GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [SEND] (check-sat)
 [RECV] sat
 *** Solver   : Z3
diff --git a/SBVTestSuite/GoldFiles/seqExamples2.gold b/SBVTestSuite/GoldFiles/seqExamples2.gold
--- a/SBVTestSuite/GoldFiles/seqExamples2.gold
+++ b/SBVTestSuite/GoldFiles/seqExamples2.gold
@@ -22,10 +22,16 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s2 () (Seq Int) (seq.++ s0 s1))
 [GOOD] (define-fun s4 () (Seq Int) (seq.++ s3 s0))
 [GOOD] (define-fun s5 () Bool (= s2 s4))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s5)
 [SEND] (check-sat)
 [RECV] unsat
diff --git a/SBVTestSuite/GoldFiles/seqExamples3.gold b/SBVTestSuite/GoldFiles/seqExamples3.gold
--- a/SBVTestSuite/GoldFiles/seqExamples3.gold
+++ b/SBVTestSuite/GoldFiles/seqExamples3.gold
@@ -25,13 +25,19 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s3 () (Seq Int) (seq.++ s0 s1))
 [GOOD] (define-fun s5 () Bool (= s3 s4))
 [GOOD] (define-fun s6 () (Seq Int) (seq.++ s1 s2))
 [GOOD] (define-fun s8 () Bool (= s6 s7))
 [GOOD] (define-fun s10 () Bool (= s1 s9))
 [GOOD] (define-fun s11 () Bool (not s10))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s5)
 [GOOD] (assert s8)
 [GOOD] (assert s11)
diff --git a/SBVTestSuite/GoldFiles/seqExamples4.gold b/SBVTestSuite/GoldFiles/seqExamples4.gold
--- a/SBVTestSuite/GoldFiles/seqExamples4.gold
+++ b/SBVTestSuite/GoldFiles/seqExamples4.gold
@@ -24,12 +24,18 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s3 () (Seq Int) (seq.++ s2 s0))
 [GOOD] (define-fun s5 () (Seq Int) (seq.++ s1 s4))
 [GOOD] (define-fun s6 () Bool (= s3 s5))
 [GOOD] (define-fun s7 () Int (seq.len s0))
 [GOOD] (define-fun s9 () Bool (<= s7 s8))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s6)
 [GOOD] (assert s9)
 [SEND] (check-sat)
diff --git a/SBVTestSuite/GoldFiles/seqExamples5.gold b/SBVTestSuite/GoldFiles/seqExamples5.gold
--- a/SBVTestSuite/GoldFiles/seqExamples5.gold
+++ b/SBVTestSuite/GoldFiles/seqExamples5.gold
@@ -25,7 +25,7 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s4 () (Seq Int) (seq.++ s3 s1))
 [GOOD] (define-fun s5 () (Seq Int) (seq.++ s0 s4))
 [GOOD] (define-fun s7 () (Seq Int) (seq.++ s6 s2))
@@ -37,6 +37,12 @@
 [GOOD] (define-fun s14 () (Seq Int) (seq.++ s12 s0))
 [GOOD] (define-fun s15 () Bool (= s13 s14))
 [GOOD] (define-fun s16 () Bool (not s15))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s9)
 [GOOD] (assert s11)
 [GOOD] (assert s16)
diff --git a/SBVTestSuite/GoldFiles/seqExamples6.gold b/SBVTestSuite/GoldFiles/seqExamples6.gold
--- a/SBVTestSuite/GoldFiles/seqExamples6.gold
+++ b/SBVTestSuite/GoldFiles/seqExamples6.gold
@@ -22,11 +22,17 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s3 () Bool (seq.contains s0 s1))
 [GOOD] (define-fun s4 () Bool (seq.contains s1 s2))
 [GOOD] (define-fun s5 () Bool (seq.contains s0 s2))
 [GOOD] (define-fun s6 () Bool (not s5))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s3)
 [GOOD] (assert s4)
 [GOOD] (assert s6)
diff --git a/SBVTestSuite/GoldFiles/seqExamples7.gold b/SBVTestSuite/GoldFiles/seqExamples7.gold
--- a/SBVTestSuite/GoldFiles/seqExamples7.gold
+++ b/SBVTestSuite/GoldFiles/seqExamples7.gold
@@ -22,13 +22,19 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s3 () Bool (seq.contains s0 s1))
 [GOOD] (define-fun s4 () Bool (seq.contains s0 s2))
 [GOOD] (define-fun s5 () Bool (seq.contains s1 s2))
 [GOOD] (define-fun s6 () Bool (not s5))
 [GOOD] (define-fun s7 () Bool (seq.contains s2 s1))
 [GOOD] (define-fun s8 () Bool (not s7))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s3)
 [GOOD] (assert s4)
 [GOOD] (assert s6)
diff --git a/SBVTestSuite/GoldFiles/seqExamples8.gold b/SBVTestSuite/GoldFiles/seqExamples8.gold
--- a/SBVTestSuite/GoldFiles/seqExamples8.gold
+++ b/SBVTestSuite/GoldFiles/seqExamples8.gold
@@ -22,7 +22,7 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s3 () Bool (seq.prefixof s1 s0))
 [GOOD] (define-fun s4 () Bool (seq.suffixof s2 s0))
 [GOOD] (define-fun s5 () Int (seq.len s0))
@@ -33,6 +33,12 @@
 [GOOD] (define-fun s10 () (Seq Int) (seq.++ s1 s2))
 [GOOD] (define-fun s11 () Bool (= s0 s10))
 [GOOD] (define-fun s12 () Bool (not s11))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s3)
 [GOOD] (assert s4)
 [GOOD] (assert s9)
diff --git a/SBVTestSuite/GoldFiles/seqIndexOf.gold b/SBVTestSuite/GoldFiles/seqIndexOf.gold
--- a/SBVTestSuite/GoldFiles/seqIndexOf.gold
+++ b/SBVTestSuite/GoldFiles/seqIndexOf.gold
@@ -16,7 +16,13 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
+[GOOD] ; --- preQuantifier assignments ---
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
 [GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [SEND] (check-sat)
 [RECV] sat
 *** Solver   : Z3
diff --git a/SBVTestSuite/GoldFiles/seqIndexOfBad.gold b/SBVTestSuite/GoldFiles/seqIndexOfBad.gold
--- a/SBVTestSuite/GoldFiles/seqIndexOfBad.gold
+++ b/SBVTestSuite/GoldFiles/seqIndexOfBad.gold
@@ -16,7 +16,13 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
+[GOOD] ; --- preQuantifier assignments ---
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
 [GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert false)
 [SEND] (check-sat)
 [RECV] unsat
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
@@ -22,8 +22,14 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s2 () Bool (= s0 s1))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s2)
 [SEND] (check-sat)
 [RECV] sat
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
@@ -25,9 +25,15 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s3 () Bool (= s0 s2))
 [GOOD] (define-fun s5 () Bool (= s1 s4))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s3)
 [GOOD] (assert s5)
 [SEND] (check-sat)
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
@@ -24,9 +24,15 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s3 () Bool (= s0 s2))
 [GOOD] (define-fun s4 () Bool (= s1 s2))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s3)
 [GOOD] (assert s4)
 [SEND] (check-sat)
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
@@ -24,9 +24,15 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s3 () Bool (= s0 s2))
 [GOOD] (define-fun s4 () Bool (= s1 s2))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s3)
 [GOOD] (assert s4)
 [SEND] (check-sat)
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
@@ -22,8 +22,14 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s2 () Bool (= s0 s1))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s2)
 [SEND] (check-sat)
 [RECV] sat
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
@@ -22,8 +22,14 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s2 () Bool (= s0 s1))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s2)
 [SEND] (check-sat)
 [RECV] sat
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
@@ -25,9 +25,15 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s3 () Bool (= s0 s2))
 [GOOD] (define-fun s5 () Bool (= s1 s4))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s3)
 [GOOD] (assert s5)
 [SEND] (check-sat)
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
@@ -24,9 +24,15 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s3 () Bool (= s0 s2))
 [GOOD] (define-fun s4 () Bool (= s1 s2))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s3)
 [GOOD] (assert s4)
 [SEND] (check-sat)
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
@@ -25,9 +25,15 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s3 () Bool (= s0 s2))
 [GOOD] (define-fun s5 () Bool (= s1 s4))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s3)
 [GOOD] (assert s5)
 [SEND] (check-sat)
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
@@ -25,9 +25,15 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s3 () Bool (= s0 s2))
 [GOOD] (define-fun s5 () Bool (= s1 s4))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s3)
 [GOOD] (assert s5)
 [SEND] (check-sat)
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
@@ -24,9 +24,15 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s3 () Bool (= s0 s2))
 [GOOD] (define-fun s4 () Bool (= s1 s2))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s3)
 [GOOD] (assert s4)
 [SEND] (check-sat)
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
@@ -24,9 +24,15 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s3 () Bool (= s0 s2))
 [GOOD] (define-fun s4 () Bool (= s1 s2))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s3)
 [GOOD] (assert s4)
 [SEND] (check-sat)
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
@@ -24,8 +24,14 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s2 () Bool (distinct s0 s1))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s2)
 [SEND] (check-sat)
 [RECV] sat
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
@@ -24,7 +24,13 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
+[GOOD] ; --- preQuantifier assignments ---
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
 [GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 *** Checking Satisfiability, all solutions..
 Fast allSat, Looking for solution 1
 [SEND] (check-sat)
@@ -90,9 +96,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 (store ((as const (Array E Bool)) false) C true) B true) A true)))
 [GOOD] (push 1)
-[GOOD] (define-fun s19 () (Array E Bool) (store (store ((as const (Array E Bool)) false) C true) A true))
+[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 s20 () Bool (= s0 s19))
 [GOOD] (define-fun s21 () Bool (not s20))
 [GOOD] (assert s21)
@@ -100,9 +106,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 s22 () (Array E Bool) (store (store (store ((as const (Array E Bool)) false) C true) B true) A true))
+[GOOD] (define-fun s22 () (Array E Bool) (store (store ((as const (Array E Bool)) false) C true) A true))
 [GOOD] (define-fun s23 () Bool (= s0 s22))
 [GOOD] (define-fun s24 () Bool (not s23))
 [GOOD] (assert s24)
@@ -122,9 +128,9 @@
 
 FINAL:
 Solution #1:
-  s0 = {A,B,C} :: {E}
-Solution #2:
   s0 = {A,C} :: {E}
+Solution #2:
+  s0 = {A,B,C} :: {E}
 Solution #3:
   s0 = {A,B} :: {E}
 Solution #4:
diff --git a/SBVTestSuite/GoldFiles/set_uninterp2.gold b/SBVTestSuite/GoldFiles/set_uninterp2.gold
--- a/SBVTestSuite/GoldFiles/set_uninterp2.gold
+++ b/SBVTestSuite/GoldFiles/set_uninterp2.gold
@@ -25,8 +25,14 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s2 () Bool (distinct s0 s1))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s2)
 [SEND] (check-sat)
 [RECV] sat
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
@@ -24,9 +24,15 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s3 () Bool (= s0 s2))
 [GOOD] (define-fun s4 () Bool (= s1 s2))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s3)
 [GOOD] (assert s4)
 [SEND] (check-sat)
diff --git a/SBVTestSuite/GoldFiles/sort.gold b/SBVTestSuite/GoldFiles/sort.gold
--- a/SBVTestSuite/GoldFiles/sort.gold
+++ b/SBVTestSuite/GoldFiles/sort.gold
@@ -25,7 +25,7 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s3 () Bool (<= s0 s1))
 [GOOD] (define-fun s4 () Bool (<= s1 s2))
 [GOOD] (define-fun s5 () Bool (and s3 s4))
@@ -162,6 +162,12 @@
 [GOOD] (define-fun s139 () (Seq Int) (seq.++ s9 s138))
 [GOOD] (define-fun s140 () Bool (= s105 s139))
 [GOOD] (define-fun s141 () Bool (or s137 s140))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s107)
 [GOOD] (assert s115)
 [GOOD] (assert s122)
diff --git a/SBVTestSuite/GoldFiles/strConcat.gold b/SBVTestSuite/GoldFiles/strConcat.gold
--- a/SBVTestSuite/GoldFiles/strConcat.gold
+++ b/SBVTestSuite/GoldFiles/strConcat.gold
@@ -16,7 +16,13 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
+[GOOD] ; --- preQuantifier assignments ---
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
 [GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [SEND] (check-sat)
 [RECV] sat
 *** Solver   : Z3
diff --git a/SBVTestSuite/GoldFiles/strConcatBad.gold b/SBVTestSuite/GoldFiles/strConcatBad.gold
--- a/SBVTestSuite/GoldFiles/strConcatBad.gold
+++ b/SBVTestSuite/GoldFiles/strConcatBad.gold
@@ -16,7 +16,13 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
+[GOOD] ; --- preQuantifier assignments ---
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
 [GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert false)
 [SEND] (check-sat)
 [RECV] unsat
diff --git a/SBVTestSuite/GoldFiles/strExamples1.gold b/SBVTestSuite/GoldFiles/strExamples1.gold
--- a/SBVTestSuite/GoldFiles/strExamples1.gold
+++ b/SBVTestSuite/GoldFiles/strExamples1.gold
@@ -16,7 +16,13 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
+[GOOD] ; --- preQuantifier assignments ---
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
 [GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [SEND] (check-sat)
 [RECV] sat
 *** Solver   : Z3
diff --git a/SBVTestSuite/GoldFiles/strExamples10.gold b/SBVTestSuite/GoldFiles/strExamples10.gold
--- a/SBVTestSuite/GoldFiles/strExamples10.gold
+++ b/SBVTestSuite/GoldFiles/strExamples10.gold
@@ -18,10 +18,16 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s1 () Bool (str.in.re s0 ((_ re.loop 1 3) (str.to.re "ab"))))
 [GOOD] (define-fun s2 () Int (str.len s0))
 [GOOD] (define-fun s4 () Bool (> s2 s3))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s1)
 [GOOD] (assert s4)
 [SEND] (check-sat)
diff --git a/SBVTestSuite/GoldFiles/strExamples11.gold b/SBVTestSuite/GoldFiles/strExamples11.gold
--- a/SBVTestSuite/GoldFiles/strExamples11.gold
+++ b/SBVTestSuite/GoldFiles/strExamples11.gold
@@ -19,11 +19,17 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s2 () Bool (= s0 s1))
 [GOOD] (define-fun s3 () String (int.to.str s0))
 [GOOD] (define-fun s5 () Bool (= s3 s4))
 [GOOD] (define-fun s6 () Bool (not s5))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s2)
 [GOOD] (assert s6)
 [SEND] (check-sat)
diff --git a/SBVTestSuite/GoldFiles/strExamples12.gold b/SBVTestSuite/GoldFiles/strExamples12.gold
--- a/SBVTestSuite/GoldFiles/strExamples12.gold
+++ b/SBVTestSuite/GoldFiles/strExamples12.gold
@@ -19,11 +19,17 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s2 () Bool (= s0 s1))
 [GOOD] (define-fun s3 () String (int.to.str s0))
 [GOOD] (define-fun s5 () Bool (= s3 s4))
 [GOOD] (define-fun s6 () Bool (not s5))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s2)
 [GOOD] (assert s6)
 [SEND] (check-sat)
diff --git a/SBVTestSuite/GoldFiles/strExamples13.gold b/SBVTestSuite/GoldFiles/strExamples13.gold
--- a/SBVTestSuite/GoldFiles/strExamples13.gold
+++ b/SBVTestSuite/GoldFiles/strExamples13.gold
@@ -19,11 +19,17 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s2 () Bool (= s0 s1))
 [GOOD] (define-fun s3 () Int (str.to.int s0))
 [GOOD] (define-fun s5 () Bool (= s3 s4))
 [GOOD] (define-fun s6 () Bool (not s5))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s2)
 [GOOD] (assert s6)
 [SEND] (check-sat)
diff --git a/SBVTestSuite/GoldFiles/strExamples2.gold b/SBVTestSuite/GoldFiles/strExamples2.gold
--- a/SBVTestSuite/GoldFiles/strExamples2.gold
+++ b/SBVTestSuite/GoldFiles/strExamples2.gold
@@ -19,10 +19,16 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s2 () String (str.++ s0 s1))
 [GOOD] (define-fun s4 () String (str.++ s3 s0))
 [GOOD] (define-fun s5 () Bool (= s2 s4))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s5)
 [SEND] (check-sat)
 [RECV] unsat
diff --git a/SBVTestSuite/GoldFiles/strExamples3.gold b/SBVTestSuite/GoldFiles/strExamples3.gold
--- a/SBVTestSuite/GoldFiles/strExamples3.gold
+++ b/SBVTestSuite/GoldFiles/strExamples3.gold
@@ -22,13 +22,19 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s3 () String (str.++ s0 s1))
 [GOOD] (define-fun s5 () Bool (= s3 s4))
 [GOOD] (define-fun s6 () String (str.++ s1 s2))
 [GOOD] (define-fun s8 () Bool (= s6 s7))
 [GOOD] (define-fun s10 () Bool (= s1 s9))
 [GOOD] (define-fun s11 () Bool (not s10))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s5)
 [GOOD] (assert s8)
 [GOOD] (assert s11)
diff --git a/SBVTestSuite/GoldFiles/strExamples4.gold b/SBVTestSuite/GoldFiles/strExamples4.gold
--- a/SBVTestSuite/GoldFiles/strExamples4.gold
+++ b/SBVTestSuite/GoldFiles/strExamples4.gold
@@ -21,12 +21,18 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s3 () String (str.++ s2 s0))
 [GOOD] (define-fun s5 () String (str.++ s1 s4))
 [GOOD] (define-fun s6 () Bool (= s3 s5))
 [GOOD] (define-fun s7 () Int (str.len s0))
 [GOOD] (define-fun s9 () Bool (<= s7 s8))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s6)
 [GOOD] (assert s9)
 [SEND] (check-sat)
diff --git a/SBVTestSuite/GoldFiles/strExamples5.gold b/SBVTestSuite/GoldFiles/strExamples5.gold
--- a/SBVTestSuite/GoldFiles/strExamples5.gold
+++ b/SBVTestSuite/GoldFiles/strExamples5.gold
@@ -22,7 +22,7 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s4 () String (str.++ s3 s1))
 [GOOD] (define-fun s5 () String (str.++ s0 s4))
 [GOOD] (define-fun s7 () String (str.++ s6 s2))
@@ -34,6 +34,12 @@
 [GOOD] (define-fun s14 () String (str.++ s12 s0))
 [GOOD] (define-fun s15 () Bool (= s13 s14))
 [GOOD] (define-fun s16 () Bool (not s15))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s9)
 [GOOD] (assert s11)
 [GOOD] (assert s16)
diff --git a/SBVTestSuite/GoldFiles/strExamples6.gold b/SBVTestSuite/GoldFiles/strExamples6.gold
--- a/SBVTestSuite/GoldFiles/strExamples6.gold
+++ b/SBVTestSuite/GoldFiles/strExamples6.gold
@@ -19,11 +19,17 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s3 () Bool (str.contains s0 s1))
 [GOOD] (define-fun s4 () Bool (str.contains s1 s2))
 [GOOD] (define-fun s5 () Bool (str.contains s0 s2))
 [GOOD] (define-fun s6 () Bool (not s5))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s3)
 [GOOD] (assert s4)
 [GOOD] (assert s6)
diff --git a/SBVTestSuite/GoldFiles/strExamples7.gold b/SBVTestSuite/GoldFiles/strExamples7.gold
--- a/SBVTestSuite/GoldFiles/strExamples7.gold
+++ b/SBVTestSuite/GoldFiles/strExamples7.gold
@@ -19,13 +19,19 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s3 () Bool (str.contains s0 s1))
 [GOOD] (define-fun s4 () Bool (str.contains s0 s2))
 [GOOD] (define-fun s5 () Bool (str.contains s1 s2))
 [GOOD] (define-fun s6 () Bool (not s5))
 [GOOD] (define-fun s7 () Bool (str.contains s2 s1))
 [GOOD] (define-fun s8 () Bool (not s7))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s3)
 [GOOD] (assert s4)
 [GOOD] (assert s6)
diff --git a/SBVTestSuite/GoldFiles/strExamples8.gold b/SBVTestSuite/GoldFiles/strExamples8.gold
--- a/SBVTestSuite/GoldFiles/strExamples8.gold
+++ b/SBVTestSuite/GoldFiles/strExamples8.gold
@@ -19,7 +19,7 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s3 () Bool (str.prefixof s1 s0))
 [GOOD] (define-fun s4 () Bool (str.suffixof s2 s0))
 [GOOD] (define-fun s5 () Int (str.len s0))
@@ -30,6 +30,12 @@
 [GOOD] (define-fun s10 () String (str.++ s1 s2))
 [GOOD] (define-fun s11 () Bool (= s0 s10))
 [GOOD] (define-fun s12 () Bool (not s11))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s3)
 [GOOD] (assert s4)
 [GOOD] (assert s9)
diff --git a/SBVTestSuite/GoldFiles/strExamples9.gold b/SBVTestSuite/GoldFiles/strExamples9.gold
--- a/SBVTestSuite/GoldFiles/strExamples9.gold
+++ b/SBVTestSuite/GoldFiles/strExamples9.gold
@@ -18,10 +18,16 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s1 () Bool (str.in.re s0 ((_ re.loop 1 3) (str.to.re "ab"))))
 [GOOD] (define-fun s2 () Int (str.len s0))
 [GOOD] (define-fun s4 () Bool (= s2 s3))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s1)
 [GOOD] (assert s4)
 [SEND] (check-sat)
diff --git a/SBVTestSuite/GoldFiles/strIndexOf.gold b/SBVTestSuite/GoldFiles/strIndexOf.gold
--- a/SBVTestSuite/GoldFiles/strIndexOf.gold
+++ b/SBVTestSuite/GoldFiles/strIndexOf.gold
@@ -16,7 +16,13 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
+[GOOD] ; --- preQuantifier assignments ---
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
 [GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [SEND] (check-sat)
 [RECV] sat
 *** Solver   : Z3
diff --git a/SBVTestSuite/GoldFiles/strIndexOfBad.gold b/SBVTestSuite/GoldFiles/strIndexOfBad.gold
--- a/SBVTestSuite/GoldFiles/strIndexOfBad.gold
+++ b/SBVTestSuite/GoldFiles/strIndexOfBad.gold
@@ -16,7 +16,13 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
+[GOOD] ; --- preQuantifier assignments ---
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
 [GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert false)
 [SEND] (check-sat)
 [RECV] unsat
diff --git a/SBVTestSuite/GoldFiles/sumBimapPlus.gold b/SBVTestSuite/GoldFiles/sumBimapPlus.gold
--- a/SBVTestSuite/GoldFiles/sumBimapPlus.gold
+++ b/SBVTestSuite/GoldFiles/sumBimapPlus.gold
@@ -24,7 +24,7 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s1 () Int (get_left_SBVEither s0))
 [GOOD] (define-fun s3 () Int (+ s1 s2))
 [GOOD] (define-fun s4 () (SBVEither Int Int) ((as left_SBVEither (SBVEither Int Int)) s3))
@@ -40,6 +40,12 @@
 [GOOD] (define-fun s14 () Int (ite s8 s1 s5))
 [GOOD] (define-fun s15 () Int (+ s2 s14))
 [GOOD] (define-fun s16 () Bool (= s13 s15))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s16)
 [SEND] (check-sat)
 [RECV] sat
diff --git a/SBVTestSuite/GoldFiles/sumEitherSat.gold b/SBVTestSuite/GoldFiles/sumEitherSat.gold
--- a/SBVTestSuite/GoldFiles/sumEitherSat.gold
+++ b/SBVTestSuite/GoldFiles/sumEitherSat.gold
@@ -24,13 +24,19 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s1 () Int (get_left_SBVEither s0))
 [GOOD] (define-fun s3 () Bool (> s1 s2))
 [GOOD] (define-fun s4 () Bool (get_right_SBVEither s0))
 [GOOD] (define-fun s5 () Bool (not s4))
 [GOOD] (define-fun s6 () Bool ((_ is (left_SBVEither (Int) (SBVEither Int Bool))) s0))
 [GOOD] (define-fun s7 () Bool (ite s6 s3 s5))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s7)
 [SEND] (check-sat)
 [RECV] sat
diff --git a/SBVTestSuite/GoldFiles/sumLiftEither.gold b/SBVTestSuite/GoldFiles/sumLiftEither.gold
--- a/SBVTestSuite/GoldFiles/sumLiftEither.gold
+++ b/SBVTestSuite/GoldFiles/sumLiftEither.gold
@@ -25,13 +25,19 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s2 () (SBVEither Int String) ((as left_SBVEither (SBVEither Int String)) s0))
 [GOOD] (define-fun s3 () Bool ((_ is (left_SBVEither (Int) (SBVEither Int String))) s2))
 [GOOD] (define-fun s4 () Bool (ite s3 true false))
 [GOOD] (define-fun s5 () (SBVEither Int String) ((as right_SBVEither (SBVEither Int String)) s1))
 [GOOD] (define-fun s6 () Bool ((_ is (left_SBVEither (Int) (SBVEither Int String))) s5))
 [GOOD] (define-fun s7 () Bool (ite s6 false true))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s4)
 [GOOD] (assert s7)
 [SEND] (check-sat)
diff --git a/SBVTestSuite/GoldFiles/sumLiftMaybe.gold b/SBVTestSuite/GoldFiles/sumLiftMaybe.gold
--- a/SBVTestSuite/GoldFiles/sumLiftMaybe.gold
+++ b/SBVTestSuite/GoldFiles/sumLiftMaybe.gold
@@ -24,9 +24,15 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s1 () (SBVMaybe Int) ((as just_SBVMaybe (SBVMaybe Int)) s0))
 [GOOD] (define-fun s3 () Bool (distinct s1 s2))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s3)
 [SEND] (check-sat)
 [RECV] sat
diff --git a/SBVTestSuite/GoldFiles/sumMaybe.gold b/SBVTestSuite/GoldFiles/sumMaybe.gold
--- a/SBVTestSuite/GoldFiles/sumMaybe.gold
+++ b/SBVTestSuite/GoldFiles/sumMaybe.gold
@@ -26,7 +26,7 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s1 () Bool ((_ is (nothing_SBVMaybe () (SBVMaybe Int))) s0))
 [GOOD] (define-fun s2 () Bool (ite s1 true false))
 [GOOD] (define-fun s4 () Int (get_just_SBVMaybe s0))
@@ -44,6 +44,12 @@
 [GOOD] (define-fun s18 () Int (ite s9 s15 s17))
 [GOOD] (define-fun s19 () Int (- s18 s5))
 [GOOD] (define-fun s20 () Bool (= s16 s19))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s11)
 [GOOD] (assert s14)
 [GOOD] (assert s20)
diff --git a/SBVTestSuite/GoldFiles/sumMaybeBoth.gold b/SBVTestSuite/GoldFiles/sumMaybeBoth.gold
--- a/SBVTestSuite/GoldFiles/sumMaybeBoth.gold
+++ b/SBVTestSuite/GoldFiles/sumMaybeBoth.gold
@@ -27,11 +27,17 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s2 () Bool ((_ is (left_SBVEither (Int) (SBVEither Int Int))) s0))
 [GOOD] (define-fun s3 () Bool (ite s2 true false))
 [GOOD] (define-fun s4 () Bool ((_ is (nothing_SBVMaybe () (SBVMaybe Int))) s1))
 [GOOD] (define-fun s5 () Bool (ite s4 false true))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s3)
 [GOOD] (assert s5)
 [SEND] (check-sat)
diff --git a/SBVTestSuite/GoldFiles/sumMergeEither1.gold b/SBVTestSuite/GoldFiles/sumMergeEither1.gold
--- a/SBVTestSuite/GoldFiles/sumMergeEither1.gold
+++ b/SBVTestSuite/GoldFiles/sumMergeEither1.gold
@@ -25,10 +25,16 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s3 () (SBVEither Int Bool) (ite s2 s0 s1))
 [GOOD] (define-fun s4 () Bool ((_ is (left_SBVEither (Int) (SBVEither Int Bool))) s3))
 [GOOD] (define-fun s5 () Bool (ite s4 true false))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s5)
 [SEND] (check-sat)
 [RECV] sat
diff --git a/SBVTestSuite/GoldFiles/sumMergeEither2.gold b/SBVTestSuite/GoldFiles/sumMergeEither2.gold
--- a/SBVTestSuite/GoldFiles/sumMergeEither2.gold
+++ b/SBVTestSuite/GoldFiles/sumMergeEither2.gold
@@ -25,10 +25,16 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s3 () (SBVEither Int Bool) (ite s2 s0 s1))
 [GOOD] (define-fun s4 () Bool ((_ is (left_SBVEither (Int) (SBVEither Int Bool))) s3))
 [GOOD] (define-fun s5 () Bool (ite s4 false true))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s5)
 [SEND] (check-sat)
 [RECV] sat
diff --git a/SBVTestSuite/GoldFiles/sumMergeMaybe1.gold b/SBVTestSuite/GoldFiles/sumMergeMaybe1.gold
--- a/SBVTestSuite/GoldFiles/sumMergeMaybe1.gold
+++ b/SBVTestSuite/GoldFiles/sumMergeMaybe1.gold
@@ -25,10 +25,16 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s3 () (SBVMaybe Int) (ite s2 s0 s1))
 [GOOD] (define-fun s4 () Bool ((_ is (nothing_SBVMaybe () (SBVMaybe Int))) s3))
 [GOOD] (define-fun s5 () Bool (ite s4 true false))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s5)
 [SEND] (check-sat)
 [RECV] sat
diff --git a/SBVTestSuite/GoldFiles/sumMergeMaybe2.gold b/SBVTestSuite/GoldFiles/sumMergeMaybe2.gold
--- a/SBVTestSuite/GoldFiles/sumMergeMaybe2.gold
+++ b/SBVTestSuite/GoldFiles/sumMergeMaybe2.gold
@@ -25,10 +25,16 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s3 () (SBVMaybe Int) (ite s2 s0 s1))
 [GOOD] (define-fun s4 () Bool ((_ is (nothing_SBVMaybe () (SBVMaybe Int))) s3))
 [GOOD] (define-fun s5 () Bool (ite s4 false true))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s5)
 [SEND] (check-sat)
 [RECV] sat
diff --git a/SBVTestSuite/GoldFiles/tuple_enum.gold b/SBVTestSuite/GoldFiles/tuple_enum.gold
--- a/SBVTestSuite/GoldFiles/tuple_enum.gold
+++ b/SBVTestSuite/GoldFiles/tuple_enum.gold
@@ -35,7 +35,7 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s2 () Bool (not s1))
 [GOOD] (define-fun s4 () (SBVTuple2 E (Seq Bool)) (seq.nth s0 s3))
 [GOOD] (define-fun s5 () (Seq Bool) (proj_2_SBVTuple2 s4))
@@ -51,6 +51,12 @@
 [GOOD] (define-fun s19 () Int (seq.len s18))
 [GOOD] (define-fun s21 () Bool (= s19 s20))
 [GOOD] (define-fun s23 () Bool (seq.nth s18 s22))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s2)
 [GOOD] (assert s9)
 [GOOD] (assert s12)
diff --git a/SBVTestSuite/GoldFiles/tuple_list.gold b/SBVTestSuite/GoldFiles/tuple_list.gold
--- a/SBVTestSuite/GoldFiles/tuple_list.gold
+++ b/SBVTestSuite/GoldFiles/tuple_list.gold
@@ -30,7 +30,7 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s2 () (SBVTuple2 Int (Seq (SBVTuple2 Int String))) (seq.nth s0 s1))
 [GOOD] (define-fun s3 () Int (proj_1_SBVTuple2 s2))
 [GOOD] (define-fun s5 () Bool (= s3 s4))
@@ -48,6 +48,12 @@
 [GOOD] (define-fun s21 () Int (seq.len s20))
 [GOOD] (define-fun s22 () Bool (= s1 s21))
 [GOOD] (define-fun s24 () Bool (= s0 s23))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s5)
 [GOOD] (assert s12)
 [GOOD] (assert s15)
diff --git a/SBVTestSuite/GoldFiles/tuple_nested.gold b/SBVTestSuite/GoldFiles/tuple_nested.gold
--- a/SBVTestSuite/GoldFiles/tuple_nested.gold
+++ b/SBVTestSuite/GoldFiles/tuple_nested.gold
@@ -28,7 +28,7 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s1 () (SBVTuple2 Int (SBVTuple2 String String)) (proj_1_SBVTuple2 s0))
 [GOOD] (define-fun s2 () Int (proj_1_SBVTuple2 s1))
 [GOOD] (define-fun s4 () Bool (= s2 s3))
@@ -39,6 +39,12 @@
 [GOOD] (define-fun s11 () Bool (= s9 s10))
 [GOOD] (define-fun s12 () (_ BitVec 8) (proj_2_SBVTuple2 s0))
 [GOOD] (define-fun s14 () Bool (= s12 s13))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s4)
 [GOOD] (assert s8)
 [GOOD] (assert s11)
diff --git a/SBVTestSuite/GoldFiles/tuple_swap.gold b/SBVTestSuite/GoldFiles/tuple_swap.gold
--- a/SBVTestSuite/GoldFiles/tuple_swap.gold
+++ b/SBVTestSuite/GoldFiles/tuple_swap.gold
@@ -29,7 +29,7 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s2 () Int (proj_1_SBVTuple3 s0))
 [GOOD] (define-fun s3 () Int (proj_2_SBVTuple3 s1))
 [GOOD] (define-fun s4 () Bool (= s2 s3))
@@ -42,6 +42,12 @@
 [GOOD] (define-fun s14 () Bool (= s12 s13))
 [GOOD] (define-fun s15 () Int (proj_3_SBVTuple3 s1))
 [GOOD] (define-fun s17 () Bool (= s15 s16))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s4)
 [GOOD] (assert s7)
 [GOOD] (assert s9)
diff --git a/SBVTestSuite/GoldFiles/tuple_twoTwo.gold b/SBVTestSuite/GoldFiles/tuple_twoTwo.gold
--- a/SBVTestSuite/GoldFiles/tuple_twoTwo.gold
+++ b/SBVTestSuite/GoldFiles/tuple_twoTwo.gold
@@ -27,11 +27,17 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s2 () Int (proj_1_SBVTuple2 s0))
 [GOOD] (define-fun s4 () Bool (= s2 s3))
 [GOOD] (define-fun s5 () String (proj_1_SBVTuple2 s1))
 [GOOD] (define-fun s7 () Bool (= s5 s6))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s4)
 [GOOD] (assert s7)
 [SEND] (check-sat)
diff --git a/SBVTestSuite/GoldFiles/tuple_unequal.gold b/SBVTestSuite/GoldFiles/tuple_unequal.gold
--- a/SBVTestSuite/GoldFiles/tuple_unequal.gold
+++ b/SBVTestSuite/GoldFiles/tuple_unequal.gold
@@ -24,7 +24,7 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s2 () Int (proj_1_SBVTuple2 s0))
 [GOOD] (define-fun s3 () Int (proj_1_SBVTuple2 s1))
 [GOOD] (define-fun s4 () Bool (< s2 s3))
@@ -38,6 +38,12 @@
 [GOOD] (define-fun s12 () Bool (< s7 s6))
 [GOOD] (define-fun s13 () Bool (and s5 s12))
 [GOOD] (define-fun s14 () Bool (or s11 s13))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s10)
 [GOOD] (assert s14)
 [SEND] (check-sat)
diff --git a/SBVTestSuite/GoldFiles/uiSat_test1.gold b/SBVTestSuite/GoldFiles/uiSat_test1.gold
--- a/SBVTestSuite/GoldFiles/uiSat_test1.gold
+++ b/SBVTestSuite/GoldFiles/uiSat_test1.gold
@@ -17,8 +17,14 @@
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] (declare-fun q1 (Bool) Bool)
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s0 () Bool (q1 false))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 *** Checking Satisfiability, all solutions..
 [GOOD] (set-option :pp.max_depth      4294967295)
 [GOOD] (set-option :pp.min_alias_size 4294967295)
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
@@ -17,8 +17,14 @@
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] (declare-fun q2 (Bool Bool) Bool)
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s0 () Bool (q2 false false))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 *** Checking Satisfiability, all solutions..
 [GOOD] (set-option :pp.max_depth      4294967295)
 [GOOD] (set-option :pp.min_alias_size 4294967295)
@@ -187,7 +193,7 @@
 [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)))))
+[RECV] ((q2 (lambda ((x!1 Bool) (x!2 Bool)) (or (and (not x!1) x!2) (and x!1 x!2)))))
 [SEND] (get-value ((q2 false false)))
 [RECV] (((q2 false false) false))
 [SEND] (get-value ((q2 false true)))
@@ -290,7 +296,7 @@
 [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))))))
+         (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)))
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
@@ -18,9 +18,15 @@
 [GOOD] (declare-fun q1 (Bool) Bool)
 [GOOD] (declare-fun q2 (Bool Bool) Bool)
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s0 () Bool (q1 false))
 [GOOD] (define-fun s1 () Bool (q2 false false))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 *** Checking Satisfiability, all solutions..
 [GOOD] (set-option :pp.max_depth      4294967295)
 [GOOD] (set-option :pp.min_alias_size 4294967295)
@@ -559,7 +565,7 @@
 [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 x!1 (not x!2))))))
+         (or (and x!1 (not 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)))
@@ -961,7 +967,15 @@
 [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)))
+[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)
@@ -971,8 +985,9 @@
                   (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 false)) 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_model31_reject () Bool
           (exists ((x!0 Bool) (x!1 Bool))
@@ -989,15 +1004,7 @@
 [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))
+[RECV] ((q2 (store ((as const Array) true) false false false)))
 [GOOD] (define-fun q1_model32 ((x!0 Bool)) Bool
           (ite (and (= x!0 true)) true
           false)
@@ -1007,8 +1014,8 @@
                   (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 true)) true
-          false)
+          (ite (and (= x!0 false) (= x!1 false)) false
+          true)
        )
 [GOOD] (define-fun q2_model32_reject () Bool
           (exists ((x!0 Bool) (x!1 Bool))
@@ -1023,27 +1030,26 @@
 [SEND] (check-sat)
 [RECV] sat
 [SEND] (get-value (q1))
-[RECV] ((q1 (lambda ((x!1 Bool)) x!1)))
+[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)))))
+[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) true))
+[RECV] (((q2 true false) false))
 [SEND] (get-value ((q2 true true)))
-[RECV] (((q2 true true) false))
+[RECV] (((q2 true true) true))
 [GOOD] (define-fun q1_model33 ((x!0 Bool)) Bool
-          (ite (and (= x!0 true)) true
-          false)
+          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 true) (= x!1 false)) true
+          (ite (and (= x!0 true) (= x!1 true)) true
           false)
        )
 [GOOD] (define-fun q2_model33_reject () Bool
@@ -1059,26 +1065,27 @@
 [SEND] (check-sat)
 [RECV] sat
 [SEND] (get-value (q1))
-[RECV] ((q1 ((as const Array) false)))
+[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))))
+[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) true))
+[RECV] (((q2 false true) false))
 [SEND] (get-value ((q2 true false)))
-[RECV] (((q2 true false) false))
+[RECV] (((q2 true false) true))
 [SEND] (get-value ((q2 true true)))
 [RECV] (((q2 true true) false))
 [GOOD] (define-fun q1_model34 ((x!0 Bool)) Bool
-          false
+          (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
-          (ite (and (= x!0 false) (= x!1 true)) true
+          (ite (and (= x!0 true) (= x!1 false)) true
           false)
        )
 [GOOD] (define-fun q2_model34_reject () Bool
@@ -1096,7 +1103,15 @@
 [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) false true false)))
+[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_model35 ((x!0 Bool)) Bool
           false
        )
@@ -1105,9 +1120,9 @@
                   (distinct (q1         x!0)
                             (q1_model35 x!0))))
 [GOOD] (define-fun q2_model35 ((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))
+          (ite (and (= x!0 true) (= x!1 false)) true
+          (ite (and (= x!0 true) (= x!1 true)) true
+          false))
        )
 [GOOD] (define-fun q2_model35_reject () Bool
           (exists ((x!0 Bool) (x!1 Bool))
@@ -1124,7 +1139,15 @@
 [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 false false)))
+[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_model36 ((x!0 Bool)) Bool
           (ite (and (= x!0 true)) true
           false)
@@ -1134,9 +1157,9 @@
                   (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)) false
-          (ite (and (= x!0 false) (= x!1 false)) false
-          true))
+          (ite (and (= x!0 false) (= 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))
@@ -1153,7 +1176,7 @@
 [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 false false)))
+[RECV] ((q2 (store ((as const Array) true) false false false)))
 [GOOD] (define-fun q1_model37 ((x!0 Bool)) Bool
           false
        )
@@ -1162,9 +1185,8 @@
                   (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)) false
           (ite (and (= x!0 false) (= x!1 false)) false
-          true))
+          true)
        )
 [GOOD] (define-fun q2_model37_reject () Bool
           (exists ((x!0 Bool) (x!1 Bool))
@@ -1181,15 +1203,15 @@
 [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) x!2) (and x!1 (not x!2))))))
+[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) true))
+[RECV] (((q2 false true) false))
 [SEND] (get-value ((q2 true false)))
-[RECV] (((q2 true false) true))
+[RECV] (((q2 true false) false))
 [SEND] (get-value ((q2 true true)))
-[RECV] (((q2 true true) false))
+[RECV] (((q2 true true) true))
 [GOOD] (define-fun q1_model38 ((x!0 Bool)) Bool
           (ite (and (= x!0 true)) true
           false)
@@ -1199,9 +1221,8 @@
                   (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 false)) true
-          false))
+          (ite (and (= x!0 true) (= x!1 true)) true
+          false)
        )
 [GOOD] (define-fun q2_model38_reject () Bool
           (exists ((x!0 Bool) (x!1 Bool))
@@ -1218,7 +1239,15 @@
 [SEND] (get-value (q1))
 [RECV] ((q1 ((as const Array) false)))
 [SEND] (get-value (q2))
-[RECV] ((q2 (store ((as const Array) true) false false false)))
+[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_model39 ((x!0 Bool)) Bool
           false
        )
@@ -1227,8 +1256,8 @@
                   (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 false)) false
-          true)
+          (ite (and (= x!0 false) (= x!1 true)) true
+          false)
        )
 [GOOD] (define-fun q2_model39_reject () Bool
           (exists ((x!0 Bool) (x!1 Bool))
@@ -1245,11 +1274,11 @@
 [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))))
+[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) false))
+[RECV] (((q2 false true) true))
 [SEND] (get-value ((q2 true false)))
 [RECV] (((q2 true false) false))
 [SEND] (get-value ((q2 true true)))
@@ -1262,8 +1291,9 @@
                   (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
           (ite (and (= x!0 true) (= x!1 true)) true
-          false)
+          false))
        )
 [GOOD] (define-fun q2_model40_reject () Bool
           (exists ((x!0 Bool) (x!1 Bool))
@@ -1278,19 +1308,29 @@
 [SEND] (check-sat)
 [RECV] sat
 [SEND] (get-value (q1))
-[RECV] ((q1 (store ((as const Array) true) true false)))
+[RECV] ((q1 (lambda ((x!1 Bool)) x!1)))
 [SEND] (get-value (q2))
-[RECV] ((q2 ((as const Array) false)))
+[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_model41 ((x!0 Bool)) Bool
-          (ite (and (= x!0 true)) false
-          true)
+          (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
-          false
+          (ite (and (= x!0 true) (= x!1 false)) true
+          (ite (and (= x!0 true) (= x!1 true)) true
+          false))
        )
 [GOOD] (define-fun q2_model41_reject () Bool
           (exists ((x!0 Bool) (x!1 Bool))
@@ -1305,15 +1345,15 @@
 [SEND] (check-sat)
 [RECV] sat
 [SEND] (get-value (q1))
-[RECV] ((q1 (store ((as const Array) true) true false)))
+[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 x!2))))
+[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) false))
+[RECV] (((q2 true false) true))
 [SEND] (get-value ((q2 true true)))
 [RECV] (((q2 true true) true))
 [GOOD] (define-fun q1_model42 ((x!0 Bool)) Bool
@@ -1325,8 +1365,9 @@
                   (distinct (q1         x!0)
                             (q1_model42 x!0))))
 [GOOD] (define-fun q2_model42 ((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_model42_reject () Bool
           (exists ((x!0 Bool) (x!1 Bool))
@@ -1343,13 +1384,13 @@
 [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))))
+[RECV] ((q2 (lambda ((x!1 Bool) (x!2 Bool)) (or (and x!1 (not x!2)) (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))
+[RECV] (((q2 true false) true))
 [SEND] (get-value ((q2 true true)))
 [RECV] (((q2 true true) true))
 [GOOD] (define-fun q1_model43 ((x!0 Bool)) Bool
@@ -1360,8 +1401,9 @@
                   (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 false)) true
           (ite (and (= x!0 true) (= x!1 true)) true
-          false)
+          false))
        )
 [GOOD] (define-fun q2_model43_reject () Bool
           (exists ((x!0 Bool) (x!1 Bool))
@@ -1413,15 +1455,15 @@
 [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 x!1 (not x!2))))))
+[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) false))
+[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) true))
+[RECV] (((q2 true true) false))
 [GOOD] (define-fun q1_model45 ((x!0 Bool)) Bool
           true
        )
@@ -1430,8 +1472,8 @@
                   (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 true)) true
           (ite (and (= x!0 true) (= x!1 false)) true
-          (ite (and (= x!0 true) (= x!1 true)) true
           false))
        )
 [GOOD] (define-fun q2_model45_reject () Bool
@@ -1474,20 +1516,20 @@
 [SEND] (check-sat)
 [RECV] sat
 [SEND] (get-value (q1))
-[RECV] ((q1 (store ((as const Array) true) true false)))
+[RECV] ((q1 ((as const Array) true)))
 [SEND] (get-value (q2))
-[RECV] ((q2 (store ((as const Array) true) false false false)))
+[RECV] ((q2 (store (store ((as const Array) true) false false false) true false false)))
 [GOOD] (define-fun q1_model47 ((x!0 Bool)) Bool
-          (ite (and (= x!0 true)) false
-          true)
+          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)) false
           (ite (and (= x!0 false) (= x!1 false)) false
-          true)
+          true))
        )
 [GOOD] (define-fun q2_model47_reject () Bool
           (exists ((x!0 Bool) (x!1 Bool))
@@ -1502,20 +1544,19 @@
 [SEND] (check-sat)
 [RECV] sat
 [SEND] (get-value (q1))
-[RECV] ((q1 (store ((as const Array) true) true false)))
+[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))))))
+[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) true))
+[RECV] (((q2 true false) false))
 [SEND] (get-value ((q2 true true)))
 [RECV] (((q2 true true) false))
 [GOOD] (define-fun q1_model48 ((x!0 Bool)) Bool
-          (ite (and (= x!0 true)) false
-          true)
+          true
        )
 [GOOD] (define-fun q1_model48_reject () Bool
           (exists ((x!0 Bool))
@@ -1523,8 +1564,7 @@
                             (q1_model48 x!0))))
 [GOOD] (define-fun q2_model48 ((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))
+          false)
        )
 [GOOD] (define-fun q2_model48_reject () Bool
           (exists ((x!0 Bool) (x!1 Bool))
@@ -1541,7 +1581,15 @@
 [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)))
+[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_model49 ((x!0 Bool)) Bool
           true
        )
@@ -1550,9 +1598,8 @@
                   (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 true)) false
-          (ite (and (= x!0 false) (= x!1 false)) false
-          true))
+          (ite (and (= x!0 true) (= x!1 true)) true
+          false)
        )
 [GOOD] (define-fun q2_model49_reject () Bool
           (exists ((x!0 Bool) (x!1 Bool))
@@ -1567,20 +1614,28 @@
 [SEND] (check-sat)
 [RECV] sat
 [SEND] (get-value (q1))
-[RECV] ((q1 ((as const Array) true)))
+[RECV] ((q1 (store ((as const Array) true) true false)))
 [SEND] (get-value (q2))
-[RECV] ((q2 (store (store ((as const Array) true) false false false) true false false)))
+[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
+          (ite (and (= x!0 true)) false
+          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 false)) false
-          (ite (and (= x!0 false) (= x!1 false)) false
-          true))
+          (ite (and (= x!0 true) (= x!1 true)) true
+          false)
        )
 [GOOD] (define-fun q2_model50_reject () Bool
           (exists ((x!0 Bool) (x!1 Bool))
@@ -1595,9 +1650,9 @@
 [SEND] (check-sat)
 [RECV] sat
 [SEND] (get-value (q1))
-[RECV] ((q1 ((as const Array) true)))
+[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))))
+[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)))
@@ -1605,9 +1660,10 @@
 [SEND] (get-value ((q2 true false)))
 [RECV] (((q2 true false) false))
 [SEND] (get-value ((q2 true true)))
-[RECV] (((q2 true true) false))
+[RECV] (((q2 true true) true))
 [GOOD] (define-fun q1_model51 ((x!0 Bool)) Bool
-          true
+          (ite (and (= x!0 true)) false
+          true)
        )
 [GOOD] (define-fun q1_model51_reject () Bool
           (exists ((x!0 Bool))
@@ -1615,7 +1671,8 @@
                             (q1_model51 x!0))))
 [GOOD] (define-fun q2_model51 ((x!0 Bool) (x!1 Bool)) Bool
           (ite (and (= x!0 false) (= x!1 true)) true
-          false)
+          (ite (and (= x!0 true) (= x!1 true)) true
+          false))
        )
 [GOOD] (define-fun q2_model51_reject () Bool
           (exists ((x!0 Bool) (x!1 Bool))
@@ -1632,15 +1689,7 @@
 [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))
+[RECV] ((q2 (store ((as const Array) true) false false false)))
 [GOOD] (define-fun q1_model52 ((x!0 Bool)) Bool
           (ite (and (= x!0 true)) false
           true)
@@ -1650,8 +1699,8 @@
                   (distinct (q1         x!0)
                             (q1_model52 x!0))))
 [GOOD] (define-fun q2_model52 ((x!0 Bool) (x!1 Bool)) Bool
-          (ite (and (= x!0 false) (= x!1 true)) true
-          false)
+          (ite (and (= x!0 false) (= x!1 false)) false
+          true)
        )
 [GOOD] (define-fun q2_model52_reject () Bool
           (exists ((x!0 Bool) (x!1 Bool))
@@ -1668,15 +1717,15 @@
 [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)))))
+[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) false))
+[RECV] (((q2 true false) true))
 [SEND] (get-value ((q2 true true)))
-[RECV] (((q2 true true) true))
+[RECV] (((q2 true true) false))
 [GOOD] (define-fun q1_model53 ((x!0 Bool)) Bool
           (ite (and (= x!0 true)) false
           true)
@@ -1687,7 +1736,7 @@
                             (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
-          (ite (and (= x!0 true) (= x!1 true)) true
+          (ite (and (= x!0 true) (= x!1 false)) true
           false))
        )
 [GOOD] (define-fun q2_model53_reject () Bool
@@ -1703,21 +1752,28 @@
 [SEND] (check-sat)
 [RECV] sat
 [SEND] (get-value (q1))
-[RECV] ((q1 (lambda ((x!1 Bool)) x!1)))
+[RECV] ((q1 (store ((as const Array) true) true false)))
 [SEND] (get-value (q2))
-[RECV] ((q2 (store (store ((as const Array) true) false false false) false true false)))
+[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_model54 ((x!0 Bool)) Bool
-          (ite (and (= x!0 true)) true
-          false)
+          (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)) false
-          (ite (and (= x!0 false) (= x!1 false)) false
-          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))
@@ -1734,15 +1790,7 @@
 [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 (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 ((as const Array) false)))
 [GOOD] (define-fun q1_model55 ((x!0 Bool)) Bool
           (ite (and (= x!0 true)) false
           true)
@@ -1752,8 +1800,7 @@
                   (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 false)) true
-          false)
+          false
        )
 [GOOD] (define-fun q2_model55_reject () Bool
           (exists ((x!0 Bool) (x!1 Bool))
@@ -1768,17 +1815,17 @@
 [SEND] (check-sat)
 [RECV] sat
 [SEND] (get-value (q1))
-[RECV] ((q1 (store ((as const Array) true) true false)))
+[RECV] ((q1 (lambda ((x!1 Bool)) (not 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))))))
+[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) false))
+[RECV] (((q2 false true) true))
 [SEND] (get-value ((q2 true false)))
-[RECV] (((q2 true false) true))
+[RECV] (((q2 true false) false))
 [SEND] (get-value ((q2 true true)))
-[RECV] (((q2 true true) true))
+[RECV] (((q2 true true) false))
 [GOOD] (define-fun q1_model56 ((x!0 Bool)) Bool
           (ite (and (= x!0 true)) false
           true)
@@ -1788,9 +1835,8 @@
                   (distinct (q1         x!0)
                             (q1_model56 x!0))))
 [GOOD] (define-fun q2_model56 ((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))
+          (ite (and (= x!0 false) (= x!1 true)) true
+          false)
        )
 [GOOD] (define-fun q2_model56_reject () Bool
           (exists ((x!0 Bool) (x!1 Bool))
@@ -1805,27 +1851,19 @@
 [SEND] (check-sat)
 [RECV] sat
 [SEND] (get-value (q1))
-[RECV] ((q1 ((as const Array) true)))
+[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))
+[RECV] ((q2 ((as const Array) true)))
 [GOOD] (define-fun q1_model57 ((x!0 Bool)) Bool
-          true
+          (ite (and (= x!0 true)) false
+          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 false)) true
-          false)
+          true
        )
 [GOOD] (define-fun q2_model57_reject () Bool
           (exists ((x!0 Bool) (x!1 Bool))
@@ -1842,15 +1880,7 @@
 [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))
+[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)
@@ -1860,8 +1890,8 @@
                   (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 false)) true
-          false)
+          (ite (and (= x!0 true) (= x!1 false)) false
+          true)
        )
 [GOOD] (define-fun q2_model58_reject () Bool
           (exists ((x!0 Bool) (x!1 Bool))
@@ -1876,12 +1906,11 @@
 [SEND] (check-sat)
 [RECV] sat
 [SEND] (get-value (q1))
-[RECV] ((q1 (store ((as const Array) true) true false)))
+[RECV] ((q1 ((as const Array) true)))
 [SEND] (get-value (q2))
 [RECV] ((q2 (store ((as const Array) true) true false false)))
 [GOOD] (define-fun q1_model59 ((x!0 Bool)) Bool
-          (ite (and (= x!0 true)) false
-          true)
+          true
        )
 [GOOD] (define-fun q1_model59_reject () Bool
           (exists ((x!0 Bool))
@@ -1906,7 +1935,15 @@
 [SEND] (get-value (q1))
 [RECV] ((q1 ((as const Array) true)))
 [SEND] (get-value (q2))
-[RECV] ((q2 (store ((as const Array) true) true false false)))
+[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
           true
        )
@@ -1915,8 +1952,8 @@
                   (distinct (q1         x!0)
                             (q1_model60 x!0))))
 [GOOD] (define-fun q2_model60 ((x!0 Bool) (x!1 Bool)) Bool
-          (ite (and (= x!0 true) (= x!1 false)) false
-          true)
+          (ite (and (= x!0 false) (= x!1 false)) true
+          false)
        )
 [GOOD] (define-fun q2_model60_reject () Bool
           (exists ((x!0 Bool) (x!1 Bool))
@@ -1931,18 +1968,30 @@
 [SEND] (check-sat)
 [RECV] sat
 [SEND] (get-value (q1))
-[RECV] ((q1 ((as const Array) true)))
+[RECV] ((q1 (store ((as const Array) true) true false)))
 [SEND] (get-value (q2))
-[RECV] ((q2 ((as const Array) true)))
+[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_model61 ((x!0 Bool)) Bool
-          true
+          (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
-          true
+          (ite (and (= x!0 false) (= x!1 false)) true
+          (ite (and (= x!0 false) (= x!1 true)) true
+          false))
        )
 [GOOD] (define-fun q2_model61_reject () Bool
           (exists ((x!0 Bool) (x!1 Bool))
@@ -1957,19 +2006,20 @@
 [SEND] (check-sat)
 [RECV] sat
 [SEND] (get-value (q1))
-[RECV] ((q1 (store ((as const Array) true) true false)))
+[RECV] ((q1 ((as const Array) true)))
 [SEND] (get-value (q2))
-[RECV] ((q2 ((as const Array) true)))
+[RECV] ((q2 (store (store ((as const Array) true) true false false) true true false)))
 [GOOD] (define-fun q1_model62 ((x!0 Bool)) Bool
-          (ite (and (= x!0 true)) false
-          true)
+          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
-          true
+          (ite (and (= x!0 true) (= x!1 true)) false
+          (ite (and (= x!0 true) (= x!1 false)) false
+          true))
        )
 [GOOD] (define-fun q2_model62_reject () Bool
           (exists ((x!0 Bool) (x!1 Bool))
@@ -1986,16 +2036,7 @@
 [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 (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 ((as const Array) true)))
 [GOOD] (define-fun q1_model63 ((x!0 Bool)) Bool
           true
        )
@@ -2004,9 +2045,7 @@
                   (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
-          (ite (and (= x!0 false) (= x!1 true)) true
-          false))
+          true
        )
 [GOOD] (define-fun q2_model63_reject () Bool
           (exists ((x!0 Bool) (x!1 Bool))
@@ -2023,12 +2062,11 @@
 [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 (not x!1) (not x!2)) (and (not x!1) x!2)))))
+[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) true))
+[RECV] (((q2 false true) false))
 [SEND] (get-value ((q2 true false)))
 [RECV] (((q2 true false) false))
 [SEND] (get-value ((q2 true true)))
@@ -2043,8 +2081,7 @@
                             (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
-          (ite (and (= x!0 false) (= x!1 true)) true
-          false))
+          false)
        )
 [GOOD] (define-fun q2_model64_reject () Bool
           (exists ((x!0 Bool) (x!1 Bool))
@@ -2068,40 +2105,40 @@
 
   q2 :: Bool -> Bool -> Bool
   q2 False False = True 
-  q2 False True  = True 
   q2 _     _     = False
 Solution #2:
   q1 :: Bool -> Bool
   q1 _ = True
 
   q2 :: Bool -> Bool -> Bool
-  q2 False False = True 
-  q2 False True  = True 
-  q2 _     _     = False
+  q2 _ _ = True
 Solution #3:
   q1 :: Bool -> Bool
-  q1 True = False
-  q1 _    = True 
+  q1 _ = True
 
   q2 :: Bool -> Bool -> Bool
-  q2 _ _ = True
+  q2 True True  = False
+  q2 True False = False
+  q2 _    _     = True 
 Solution #4:
   q1 :: Bool -> Bool
-  q1 _ = True
+  q1 True = False
+  q1 _    = True 
 
   q2 :: Bool -> Bool -> Bool
-  q2 _ _ = True
+  q2 False False = True 
+  q2 False True  = True 
+  q2 _     _     = False
 Solution #5:
   q1 :: Bool -> Bool
   q1 _ = True
 
   q2 :: Bool -> Bool -> Bool
-  q2 True False = False
-  q2 _    _     = True 
+  q2 False False = True 
+  q2 _     _     = False
 Solution #6:
   q1 :: Bool -> Bool
-  q1 True = False
-  q1 _    = True 
+  q1 _ = True
 
   q2 :: Bool -> Bool -> Bool
   q2 True False = False
@@ -2112,96 +2149,92 @@
   q1 _    = True 
 
   q2 :: Bool -> Bool -> Bool
-  q2 False False = True 
-  q2 _     _     = False
+  q2 True False = False
+  q2 _    _     = True 
 Solution #8:
   q1 :: Bool -> Bool
-  q1 _ = True
+  q1 True = False
+  q1 _    = True 
 
   q2 :: Bool -> Bool -> Bool
-  q2 False False = True 
-  q2 _     _     = False
+  q2 _ _ = True
 Solution #9:
   q1 :: Bool -> Bool
   q1 True = False
   q1 _    = True 
 
   q2 :: Bool -> Bool -> Bool
-  q2 True False = True 
-  q2 True True  = True 
-  q2 _    _     = False
+  q2 False True = True 
+  q2 _     _    = False
 Solution #10:
   q1 :: Bool -> Bool
   q1 True = False
   q1 _    = True 
 
   q2 :: Bool -> Bool -> Bool
-  q2 True False = True 
-  q2 _    _     = False
+  q2 _ _ = False
 Solution #11:
   q1 :: Bool -> Bool
-  q1 True = True 
-  q1 _    = False
+  q1 True = False
+  q1 _    = True 
 
   q2 :: Bool -> Bool -> Bool
-  q2 False True  = False
-  q2 False False = False
-  q2 _     _     = True 
+  q2 True False = True 
+  q2 _    _     = False
 Solution #12:
   q1 :: Bool -> Bool
   q1 True = False
   q1 _    = True 
 
   q2 :: Bool -> Bool -> Bool
-  q2 False True = True 
-  q2 True  True = True 
-  q2 _     _    = False
+  q2 False True  = True 
+  q2 True  False = True 
+  q2 _     _     = False
 Solution #13:
   q1 :: Bool -> Bool
   q1 True = False
   q1 _    = True 
 
   q2 :: Bool -> Bool -> Bool
-  q2 False True = True 
-  q2 _     _    = False
+  q2 False False = False
+  q2 _     _     = True 
 Solution #14:
   q1 :: Bool -> Bool
-  q1 _ = True
+  q1 True = False
+  q1 _    = True 
 
   q2 :: Bool -> Bool -> Bool
   q2 False True = True 
+  q2 True  True = True 
   q2 _     _    = False
 Solution #15:
   q1 :: Bool -> Bool
-  q1 _ = True
+  q1 True = False
+  q1 _    = True 
 
   q2 :: Bool -> Bool -> Bool
-  q2 True  False = False
-  q2 False False = False
-  q2 _     _     = True 
+  q2 True True = True 
+  q2 _    _    = False
 Solution #16:
   q1 :: Bool -> Bool
   q1 _ = True
 
   q2 :: Bool -> Bool -> Bool
-  q2 True  True  = False
-  q2 False False = False
-  q2 _     _     = True 
+  q2 True True = True 
+  q2 _    _    = False
 Solution #17:
   q1 :: Bool -> Bool
-  q1 True = False
-  q1 _    = True 
+  q1 _ = True
 
   q2 :: Bool -> Bool -> Bool
-  q2 False True  = True 
-  q2 True  False = True 
-  q2 _     _     = False
+  q2 False True = True 
+  q2 _     _    = False
 Solution #18:
   q1 :: Bool -> Bool
-  q1 True = False
-  q1 _    = True 
+  q1 _ = True
 
   q2 :: Bool -> Bool -> Bool
+  q2 True  False = False
   q2 False False = False
   q2 _     _     = True 
 Solution #19:
@@ -2216,9 +2249,9 @@
   q1 _ = True
 
   q2 :: Bool -> Bool -> Bool
-  q2 True False = True 
-  q2 True True  = True 
-  q2 _    _     = False
+  q2 False True  = True 
+  q2 True  False = True 
+  q2 _     _     = False
 Solution #21:
   q1 :: Bool -> Bool
   q1 _ = True
@@ -2231,52 +2264,55 @@
   q1 _ = True
 
   q2 :: Bool -> Bool -> Bool
-  q2 True True = True 
-  q2 _    _    = False
+  q2 True False = True 
+  q2 True True  = True 
+  q2 _    _     = False
 Solution #23:
   q1 :: Bool -> Bool
   q1 True = False
   q1 _    = True 
 
   q2 :: Bool -> Bool -> Bool
-  q2 True True = True 
-  q2 _    _    = False
+  q2 True False = True 
+  q2 True True  = True 
+  q2 _    _     = False
 Solution #24:
   q1 :: Bool -> Bool
-  q1 True = False
-  q1 _    = True 
+  q1 True = True 
+  q1 _    = False
 
   q2 :: Bool -> Bool -> Bool
-  q2 _ _ = False
+  q2 True False = True 
+  q2 True True  = True 
+  q2 _    _     = False
 Solution #25:
   q1 :: Bool -> Bool
   q1 _ = False
 
   q2 :: Bool -> Bool -> Bool
-  q2 True True = True 
-  q2 _    _    = False
+  q2 False True = True 
+  q2 True  True = True 
+  q2 _     _    = False
 Solution #26:
   q1 :: Bool -> Bool
   q1 _ = False
 
   q2 :: Bool -> Bool -> Bool
-  q2 False False = False
-  q2 _     _     = True 
+  q2 False True = True 
+  q2 _     _    = False
 Solution #27:
   q1 :: Bool -> Bool
   q1 True = True 
   q1 _    = False
 
   q2 :: Bool -> Bool -> Bool
-  q2 False True  = True 
-  q2 True  False = True 
-  q2 _     _     = False
+  q2 True True = True 
+  q2 _    _    = False
 Solution #28:
   q1 :: Bool -> Bool
   q1 _ = False
 
   q2 :: Bool -> Bool -> Bool
-  q2 True  False = False
   q2 False False = False
   q2 _     _     = True 
 Solution #29:
@@ -2285,41 +2321,33 @@
   q1 _    = False
 
   q2 :: Bool -> Bool -> Bool
-  q2 True  False = False
-  q2 False False = False
-  q2 _     _     = True 
+  q2 False True  = True 
+  q2 True  False = True 
+  q2 _     _     = False
 Solution #30:
   q1 :: Bool -> Bool
   q1 _ = False
 
   q2 :: Bool -> Bool -> Bool
-  q2 False True  = False
-  q2 False False = False
-  q2 _     _     = True 
+  q2 True False = True 
+  q2 True True  = True 
+  q2 _    _     = False
 Solution #31:
   q1 :: Bool -> Bool
-  q1 _ = False
-
-  q2 :: Bool -> Bool -> Bool
-  q2 False True = True 
-  q2 _     _    = False
-Solution #32:
-  q1 :: Bool -> Bool
   q1 True = True 
   q1 _    = False
 
   q2 :: Bool -> Bool -> Bool
   q2 True False = True 
   q2 _    _     = False
-Solution #33:
+Solution #32:
   q1 :: Bool -> Bool
-  q1 True = True 
-  q1 _    = False
+  q1 _ = False
 
   q2 :: Bool -> Bool -> Bool
   q2 True True = True 
   q2 _    _    = False
-Solution #34:
+Solution #33:
   q1 :: Bool -> Bool
   q1 True = True 
   q1 _    = False
@@ -2327,6 +2355,15 @@
   q2 :: Bool -> Bool -> Bool
   q2 False False = False
   q2 _     _     = True 
+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 
diff --git a/SBVTestSuite/GoldFiles/unint-axioms-query.gold b/SBVTestSuite/GoldFiles/unint-axioms-query.gold
--- a/SBVTestSuite/GoldFiles/unint-axioms-query.gold
+++ b/SBVTestSuite/GoldFiles/unint-axioms-query.gold
@@ -20,7 +20,13 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
+[GOOD] ; --- preQuantifier assignments ---
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
 [GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (declare-fun AND (B B) B)
 [GOOD] (declare-fun NOT (B) B)
 [GOOD] (declare-fun OR (B B) B)
diff --git a/SBVTestSuite/GoldFiles/uninterpreted-3.gold b/SBVTestSuite/GoldFiles/uninterpreted-3.gold
--- a/SBVTestSuite/GoldFiles/uninterpreted-3.gold
+++ b/SBVTestSuite/GoldFiles/uninterpreted-3.gold
@@ -18,10 +18,16 @@
 [GOOD] (declare-fun p () Bool)
 [GOOD] (declare-fun q () Bool)
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s0 () Bool p)
 [GOOD] (define-fun s1 () Bool q)
 [GOOD] (define-fun s2 () Bool (or s0 s1))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s2)
 [SEND] (check-sat)
 [RECV] sat
diff --git a/SBVTestSuite/GoldFiles/uninterpreted-3a.gold b/SBVTestSuite/GoldFiles/uninterpreted-3a.gold
--- a/SBVTestSuite/GoldFiles/uninterpreted-3a.gold
+++ b/SBVTestSuite/GoldFiles/uninterpreted-3a.gold
@@ -18,10 +18,16 @@
 [GOOD] (declare-fun p () Bool)
 [GOOD] (declare-fun q () Bool)
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s0 () Bool p)
 [GOOD] (define-fun s1 () Bool q)
 [GOOD] (define-fun s2 () Bool (or s0 s1))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s2)
 *** Checking Satisfiability, all solutions..
 Fast allSat, Looking for solution 1
diff --git a/SBVTestSuite/GoldFiles/uninterpreted-4.gold b/SBVTestSuite/GoldFiles/uninterpreted-4.gold
--- a/SBVTestSuite/GoldFiles/uninterpreted-4.gold
+++ b/SBVTestSuite/GoldFiles/uninterpreted-4.gold
@@ -19,10 +19,16 @@
 [GOOD] (declare-fun c () Q)
 [GOOD] (declare-fun d () Q)
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s0 () Q c)
 [GOOD] (define-fun s1 () Q d)
 [GOOD] (define-fun s2 () Bool (distinct s0 s1))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s2)
 [SEND] (check-sat)
 [RECV] sat
diff --git a/SBVTestSuite/GoldFiles/uninterpreted-4a.gold b/SBVTestSuite/GoldFiles/uninterpreted-4a.gold
--- a/SBVTestSuite/GoldFiles/uninterpreted-4a.gold
+++ b/SBVTestSuite/GoldFiles/uninterpreted-4a.gold
@@ -19,10 +19,16 @@
 [GOOD] (declare-fun c () Q)
 [GOOD] (declare-fun d () Q)
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s0 () Q c)
 [GOOD] (define-fun s1 () Q d)
 [GOOD] (define-fun s2 () Bool (distinct s0 s1))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s2)
 *** Checking Satisfiability, all solutions..
 *** SBV.allSat: Uninterpreted function: c :: Q
diff --git a/SBVTestSuite/GoldFiles/validate_0.gold b/SBVTestSuite/GoldFiles/validate_0.gold
--- a/SBVTestSuite/GoldFiles/validate_0.gold
+++ b/SBVTestSuite/GoldFiles/validate_0.gold
@@ -18,8 +18,14 @@
 [ISSUE] ; --- arrays ---
 [ISSUE] ; --- uninterpreted constants ---
 [ISSUE] ; --- user given axioms ---
-[ISSUE] ; --- formula ---
+[ISSUE] ; --- preQuantifier assignments ---
 [ISSUE] (define-fun s2 () Bool (bvult s0 s1))
+[ISSUE] ; --- arrayDelayeds ---
+[ISSUE] ; --- arraySetups ---
+[ISSUE] ; --- formula ---
+[ISSUE] ; --- postQuantifier assignments ---
+[ISSUE] ; --- delayedEqualities ---
+[ISSUE] ; -- finalAssert ---
 [ISSUE] (assert s2)
 [SEND] (check-sat)
 [RECV] sat
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
@@ -18,18 +18,24 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s2 () (_ FloatingPoint  8 24) (fp.add s1 s0 s0))
 [GOOD] (define-fun s3 () Bool (fp.eq s0 s2))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s3)
 [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.
 
@@ -38,7 +44,7 @@
 *** 
 *** Assignment:
 *** 
-***       x = 0.0 :: Float
+***       x = 3.4028235e38 :: Float
 *** 
 *** Not all floating point operations are supported concretely.
 *** 
@@ -48,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
@@ -18,18 +18,24 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s2 () (_ FloatingPoint  8 24) (fp.fma s1 s0 s0 s0))
 [GOOD] (define-fun s3 () Bool (fp.eq s0 s2))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s3)
 [SEND] (check-sat)
 [RECV] sat
 [SEND] (get-value (s0))
-[RECV] ((s0 (_ -zero 8 24)))
+[RECV] ((s0 (fp #b0 #x33 #b11111010111011111101111)))
 *** Solver   : Z3
 *** Exit code: ExitSuccess
 [VALIDATE] Validating the model. Assignment:
-[VALIDATE]       x = -0.0 :: Float
+[VALIDATE]       x = 2.6208028e-23 :: Float
 [VALIDATE] There are no constraints to check.
 [VALIDATE] Validating outputs.
 
@@ -38,7 +44,7 @@
 *** 
 *** Assignment:
 *** 
-***       x = -0.0 :: Float
+***       x = 2.6208028e-23 :: Float
 *** 
 *** Floating point FMA operation is not supported concretely.
 *** 
@@ -48,4 +54,4 @@
 *** Alleged model:
 ***
 *** Satisfiable. Model:
-***   x = -0.0 :: Float
+***   x = 2.6208028e-23 :: Float
diff --git a/SBVTestSuite/GoldFiles/validate_3.gold b/SBVTestSuite/GoldFiles/validate_3.gold
--- a/SBVTestSuite/GoldFiles/validate_3.gold
+++ b/SBVTestSuite/GoldFiles/validate_3.gold
@@ -17,7 +17,13 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
+[GOOD] ; --- preQuantifier assignments ---
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
 [GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert false)
 [SEND] (check-sat)
 [RECV] unsat
diff --git a/SBVTestSuite/GoldFiles/validate_4.gold b/SBVTestSuite/GoldFiles/validate_4.gold
--- a/SBVTestSuite/GoldFiles/validate_4.gold
+++ b/SBVTestSuite/GoldFiles/validate_4.gold
@@ -17,7 +17,13 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
+[GOOD] ; --- preQuantifier assignments ---
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
 [GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert false)
 [GOOD] (assert false)
 [SEND] (check-sat)
diff --git a/SBVTestSuite/GoldFiles/validate_5.gold b/SBVTestSuite/GoldFiles/validate_5.gold
--- a/SBVTestSuite/GoldFiles/validate_5.gold
+++ b/SBVTestSuite/GoldFiles/validate_5.gold
@@ -20,11 +20,17 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s2 () Bool (> s0 s1))
 [GOOD] (define-fun s4 () Bool (> s0 s3))
 [GOOD] (define-fun s6 () Int (+ s1 s5))
 [GOOD] (define-fun s7 () Bool (= s0 s6))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s2)
 [GOOD] (assert s4)
 [GOOD] (assert s7)
diff --git a/SBVTestSuite/GoldFiles/validate_6.gold b/SBVTestSuite/GoldFiles/validate_6.gold
--- a/SBVTestSuite/GoldFiles/validate_6.gold
+++ b/SBVTestSuite/GoldFiles/validate_6.gold
@@ -20,11 +20,17 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
-[GOOD] ; --- formula ---
+[GOOD] ; --- preQuantifier assignments ---
 [GOOD] (define-fun s2 () Bool (> s0 s1))
 [GOOD] (define-fun s4 () Bool (> s0 s3))
 [GOOD] (define-fun s6 () Int (+ s1 s5))
 [GOOD] (define-fun s7 () Bool (= s0 s6))
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
+[GOOD] ; --- formula ---
+[GOOD] ; --- postQuantifier assignments ---
+[GOOD] ; --- delayedEqualities ---
+[GOOD] ; -- finalAssert ---
 [GOOD] (assert s2)
 [GOOD] (assert s4)
 [GOOD] (assert (not s7))
diff --git a/SBVTestSuite/GoldFiles/validate_7.gold b/SBVTestSuite/GoldFiles/validate_7.gold
--- a/SBVTestSuite/GoldFiles/validate_7.gold
+++ b/SBVTestSuite/GoldFiles/validate_7.gold
@@ -17,8 +17,12 @@
 [GOOD] ; --- arrays ---
 [GOOD] ; --- uninterpreted constants ---
 [GOOD] ; --- user given axioms ---
+[GOOD] ; --- preQuantifier assignments ---
+[GOOD] ; --- arrayDelayeds ---
+[GOOD] ; --- arraySetups ---
 [GOOD] ; --- formula ---
 [GOOD] (assert (forall ((s1 (_ FloatingPoint  8 24)))
+       ; --- postQuantifier assignments ---
                    (let ((s2 (fp.isNaN s1)))
                    (let ((s3 (fp.isInfinite s1)))
                    (let ((s4 (or s2 s3)))
@@ -26,6 +30,8 @@
                    (let ((s6 (not s5)))
                    (let ((s7 (fp.leq s0 s1)))
                    (let ((s8 (or s6 s7)))
+       ; --- delayedEqualities ---
+       ; -- finalAssert ---
                    s8)))))))))
 [SEND] (check-sat)
 [RECV] sat
diff --git a/SBVTestSuite/TestSuite/Arrays/Caching.hs b/SBVTestSuite/TestSuite/Arrays/Caching.hs
--- a/SBVTestSuite/TestSuite/Arrays/Caching.hs
+++ b/SBVTestSuite/TestSuite/Arrays/Caching.hs
@@ -28,7 +28,7 @@
 
 test :: Bool -> Symbolic SBool
 test swap = do
-    arr :: SFunArray Integer Integer <- newArray "items" (Just 0)
+    arr :: SArray Integer Integer <- newArray "items" (Just 0)
     x   <- sInteger "x"
 
     let ys = writeArray arr 0 2
diff --git a/SBVTestSuite/TestSuite/Arrays/InitVals.hs b/SBVTestSuite/TestSuite/Arrays/InitVals.hs
--- a/SBVTestSuite/TestSuite/Arrays/InitVals.hs
+++ b/SBVTestSuite/TestSuite/Arrays/InitVals.hs
@@ -59,16 +59,10 @@
 tests =
   testGroup "Arrays.InitVals"
     [ testCase "readDef_SArray"              $ assertIsThm (readDef (undefined :: SArray    Integer Integer))
-    , testCase "readDef_SFunArray"           $ assertIsThm (readDef (undefined :: SFunArray Integer Integer))
-
     , testCase "readDef2_SArray2"            $ assertIsSat (readNoDef (undefined :: SArray    Integer Integer))
-    , testCase "readDef2_SFunArray"          $ assertIsSat (readNoDef (undefined :: SFunArray Integer Integer))
-
     , goldenCapturedIO "constArr_SArray"     $ t  (undefined :: SArray    Integer Integer)
-    , goldenCapturedIO "constArr_SFunArray"  $ t  (undefined :: SFunArray Integer Integer)
 
     , goldenCapturedIO "constArr2_SArray"    $ t2 (undefined :: SArray    Integer Integer)
-    , goldenCapturedIO "constArr2_SFunArray" $ t2 (undefined :: SFunArray Integer Integer)
     ]
     where t p goldFile = do r <- satWith defaultSMTCfg{verbose=True, redirectVerbose = Just goldFile} (constArr p)
                             appendFile goldFile ("\nFINAL OUTPUT:\n" ++ show r ++ "\n")
diff --git a/SBVTestSuite/TestSuite/Arrays/Memory.hs b/SBVTestSuite/TestSuite/Arrays/Memory.hs
--- a/SBVTestSuite/TestSuite/Arrays/Memory.hs
+++ b/SBVTestSuite/TestSuite/Arrays/Memory.hs
@@ -21,72 +21,69 @@
 type ValueBase   = Word64
 type Address     = SBV AddressBase
 type Value       = SBV ValueBase
-type Memory m    = m AddressBase ValueBase
+type Memory      = SArray AddressBase ValueBase
 
 -- | read-after-write: If you write a value and read it back, you'll get it
-raw :: SymArray m => Address -> Value -> Memory m -> SBool
+raw :: Address -> Value -> Memory -> SBool
 raw a v m = readArray (writeArray m a v) a .== v
 
 -- | if read from a place you didn't write to, the result doesn't change
-rawd :: SymArray m => Address -> Address -> Value -> Memory m -> SBool
+rawd :: Address -> Address -> Value -> Memory -> SBool
 rawd a b v m = a ./= b .=> readArray (writeArray m a v) b .== readArray m b
 
 -- | write-after-write: If you write to the same location twice, then the first one is ignored
-waw :: SymArray m => Address -> Value -> Value -> Memory m -> Address -> SBool
+waw :: Address -> Value -> Value -> Memory -> Address -> SBool
 waw a v1 v2 m0 i = readArray m2 i .== readArray m3 i
   where m1 = writeArray m0 a v1
         m2 = writeArray m1 a v2
         m3 = writeArray m0 a v2
 
 -- | Two writes to different locations commute, i.e., can be done in any order
-wcommutesGood :: SymArray m => (Address, Value) -> (Address, Value) -> Memory m -> Address -> SBool
+wcommutesGood :: (Address, Value) -> (Address, Value) -> Memory -> Address -> SBool
 wcommutesGood (a, x) (b, y) m i = a ./= b .=> wcommutesBad (a, x) (b, y) m i
 
 -- | Two writes do not commute if they can be done to the same location
-wcommutesBad :: SymArray m => (Address, Value) -> (Address, Value) -> Memory m -> Address -> SBool
+wcommutesBad :: (Address, Value) -> (Address, Value) -> Memory -> Address -> SBool
 wcommutesBad (a, x) (b, y) m i = readArray m0 i .== readArray m1 i
    where m0 = writeArray (writeArray m a x) b y
          m1 = writeArray (writeArray m b y) a x
 
--- | Extensionality. Note that we can only check this for SArray, since an SFunArray doesn't allow for
--- symbolic equality. (In other words, checking this for SFunArray would be saying "if all reads are the
--- same, then all reads are the same," which is useless at best.) Essentially, we need a nested
--- quantifier here.
-extensionality :: (SymArray m, EqSymbolic (Memory m)) => Memory m -> Memory m -> Predicate
+-- | Extensionality
+extensionality :: Memory -> Memory -> Predicate
 extensionality m1 m2 = do i <- exists_
                           return $ (readArray m1 i ./= readArray m2 i) .|| m1 .== m2
 
 -- | Extensionality, second variant. Expressible for both kinds of arrays.
-extensionality2 :: SymArray m => Memory m -> Memory m -> Address -> Predicate
+extensionality2 :: Memory -> Memory -> Address -> Predicate
 extensionality2 m1 m2 i = do j <- exists_
                              return $ (readArray m1 j ./= readArray m2 j) .|| readArray m1 i .== readArray m2 i
 
 -- | Merge, using memory equality to check result
-mergeEq :: (SymArray m, Mergeable (Memory m), EqSymbolic (Memory m)) => SBool -> Memory m  -> Memory m -> SBool
+mergeEq :: SBool -> Memory -> Memory -> SBool
 mergeEq b m1 m2 = ite b m1 m2 .== ite (sNot b) m2 m1
 
 -- | Merge, using extensionality to check result
-mergeExt :: (SymArray m, Mergeable (Memory m)) => SBool -> Memory m -> Memory m -> Address -> SBool
+mergeExt :: SBool -> Memory -> Memory -> Address -> SBool
 mergeExt b m1 m2 i = readArray (ite b m1 m2) i .== readArray (ite (sNot b) m2 m1) i
 
 -- | Merge semantics
-mergeSem :: (SymArray m, Mergeable (Memory m)) => SBool -> Memory m -> Memory m -> Address -> SBool
+mergeSem :: SBool -> Memory -> Memory -> Address -> SBool
 mergeSem b m1 m2 i = readArray (ite b m1 m2) i .== ite b (readArray m1 i) (readArray m2 i)
 
 -- | Merge semantics 2, but make sure to populate the array so merge does something interesting
-mergeSem2 :: (SymArray m, Mergeable (Memory m)) => SBool -> Memory m -> Memory m -> (Address, Value) -> (Address, Value) -> Address -> SBool
+mergeSem2 :: SBool -> Memory -> Memory -> (Address, Value) -> (Address, Value) -> Address -> SBool
 mergeSem2 b m1 m2 (a1, v1) (a2, v2) i = readArray (ite b m1' m2') i .== ite b (readArray m1' i) (readArray m2' i)
    where m1' = writeArray (writeArray m1 a1 v1) a2 v2
          m2' = writeArray (writeArray m2 a1 v1) a2 v2
 
 -- | Merge is done correctly:
-mergeSem3 :: (SymArray m, Mergeable (Memory m)) => SBool -> Memory m -> (Address, Value) -> (Address, Value) -> SBool
+mergeSem3 :: SBool -> Memory -> (Address, Value) -> (Address, Value) -> SBool
 mergeSem3 b m (a1, v1) (a2, v2) = readArray (ite b m1 m2) a1 .== ite b (readArray m1 a1) (readArray m2 a1)
   where m1 = writeArray m a1 v1
         m2 = writeArray m a2 v2
 
 -- | Another merge check
-mergeSem4 :: (SymArray m, Mergeable (Memory m)) => SBool -> Memory m -> Address -> Address -> SBool
+mergeSem4 :: SBool -> Memory -> Address -> Address -> SBool
 mergeSem4 b m a1 a2 = readArray m3 a2 .== ite b (readArray m a2) 3
   where m1 = writeArray m a1 1
         m2 = writeArray (writeArray m a1 2) a2 3
@@ -95,40 +92,17 @@
 tests :: TestTree
 tests =
   testGroup "Arrays.Memory"
-    [ testCase "raw_SArray"              $ assertIsThm   (raw :: Address -> Value -> Memory SArray    -> SBool)
-    , testCase "raw_SFunArray"           $ assertIsThm   (raw :: Address -> Value -> Memory SFunArray -> SBool)
-
-    , testCase "rawd_SArray"             $ assertIsThm   (rawd :: Address -> Address -> Value -> Memory SArray    -> SBool)
-    , testCase "rawd_SFunArray"          $ assertIsThm   (rawd :: Address -> Address -> Value -> Memory SFunArray -> SBool)
-
-    , testCase "waw_SArray"              $ assertIsThm   (waw :: Address -> Value -> Value -> Memory SArray    -> Address -> SBool)
-    , testCase "waw_SFunArray"           $ assertIsThm   (waw :: Address -> Value -> Value -> Memory SFunArray -> Address -> SBool)
-
-    , testCase "wcommute-good_SArray"    $ assertIsThm   (wcommutesGood :: (Address, Value) -> (Address, Value) -> Memory SArray    -> Address -> SBool)
-    , testCase "wcommute-good_SFunArray" $ assertIsThm   (wcommutesGood :: (Address, Value) -> (Address, Value) -> Memory SFunArray -> Address -> SBool)
-
-    , testCase "wcommute-bad_SArray"     $ assertIsntThm (wcommutesBad  :: (Address, Value) -> (Address, Value) -> Memory SArray    -> Address -> SBool)
-    , testCase "wcommute-bad_SFunArray"  $ assertIsntThm (wcommutesBad  :: (Address, Value) -> (Address, Value) -> Memory SFunArray -> Address -> SBool)
-
-    , testCase "ext_SArray"              $ assertIsThm   (extensionality :: Memory SArray -> Memory SArray -> Predicate)
-
-    , testCase "ext2_SArray"             $ assertIsThm   (extensionality2 :: Memory SArray    -> Memory SArray    -> Address -> Predicate)
-    , testCase "ext2_SFunArray"          $ assertIsThm   (extensionality2 :: Memory SFunArray -> Memory SFunArray -> Address -> Predicate)
-
-    , testCase "mergeEq_SArray"          $ assertIsThm   (mergeEq :: SBool -> Memory SArray -> Memory SArray -> SBool)
-
-    , testCase "mergeExt_SArray"         $ assertIsThm   (mergeExt :: SBool -> Memory SArray    -> Memory SArray    -> Address -> SBool)
-    , testCase "mergeExt_SFunArray"      $ assertIsThm   (mergeExt :: SBool -> Memory SFunArray -> Memory SFunArray -> Address -> SBool)
-
-    , testCase "mergeSem_SArray"         $ assertIsThm   (mergeSem :: SBool -> Memory SArray    -> Memory SArray    -> Address -> SBool)
-    , testCase "mergeSem_SFunArray"      $ assertIsThm   (mergeSem :: SBool -> Memory SFunArray -> Memory SFunArray -> Address -> SBool)
-
-    , testCase "mergeSem2_SArray"        $ assertIsThm   (mergeSem2 :: SBool -> Memory SArray    -> Memory SArray    -> (Address, Value) -> (Address, Value) -> Address -> SBool)
-    , testCase "mergeSem2_SFunArray"     $ assertIsThm   (mergeSem2 :: SBool -> Memory SFunArray -> Memory SFunArray -> (Address, Value) -> (Address, Value) -> Address -> SBool)
-
-    , testCase "mergeSem3_SArray"        $ assertIsThm   (mergeSem3 :: SBool -> Memory SArray    -> (Address, Value) -> (Address, Value) -> SBool)
-    , testCase "mergeSem3_SFunArray"     $ assertIsThm   (mergeSem3 :: SBool -> Memory SFunArray -> (Address, Value) -> (Address, Value) -> SBool)
-
-    , testCase "mergeSem4_SArray"        $ assertIsntThm (mergeSem4 :: SBool -> Memory SArray    -> Address -> Address -> SBool)
-    , testCase "mergeSem4_SFunArray"     $ assertIsntThm (mergeSem4 :: SBool -> Memory SFunArray -> Address -> Address -> SBool)
+    [ testCase "raw_SArray"              $ assertIsThm   (raw             :: Address -> Value -> Memory -> SBool)
+    , testCase "rawd_SArray"             $ assertIsThm   (rawd            :: Address -> Address -> Value -> Memory -> SBool)
+    , testCase "waw_SArray"              $ assertIsThm   (waw             :: Address -> Value -> Value -> Memory -> Address -> SBool)
+    , testCase "wcommute-good_SArray"    $ assertIsThm   (wcommutesGood   :: (Address, Value) -> (Address, Value) -> Memory -> Address -> SBool)
+    , testCase "wcommute-bad_SArray"     $ assertIsntThm (wcommutesBad    :: (Address, Value) -> (Address, Value) -> Memory -> Address -> SBool)
+    , testCase "ext_SArray"              $ assertIsThm   (extensionality  :: Memory -> Memory -> Predicate)
+    , testCase "ext2_SArray"             $ assertIsThm   (extensionality2 :: Memory -> Memory -> Address -> Predicate)
+    , testCase "mergeEq_SArray"          $ assertIsThm   (mergeEq         :: SBool -> Memory -> Memory -> SBool)
+    , testCase "mergeExt_SArray"         $ assertIsThm   (mergeExt        :: SBool -> Memory -> Memory -> Address -> SBool)
+    , testCase "mergeSem_SArray"         $ assertIsThm   (mergeSem        :: SBool -> Memory -> Memory -> Address -> SBool)
+    , testCase "mergeSem2_SArray"        $ assertIsThm   (mergeSem2       :: SBool -> Memory -> Memory -> (Address, Value) -> (Address, Value) -> Address -> SBool)
+    , testCase "mergeSem3_SArray"        $ assertIsThm   (mergeSem3       :: SBool -> Memory -> (Address, Value) -> (Address, Value) -> SBool)
+    , testCase "mergeSem4_SArray"        $ assertIsntThm (mergeSem4       :: SBool -> Memory -> Address -> Address -> SBool)
     ]
diff --git a/SBVTestSuite/TestSuite/Optimization/Combined.hs b/SBVTestSuite/TestSuite/Optimization/Combined.hs
--- a/SBVTestSuite/TestSuite/Optimization/Combined.hs
+++ b/SBVTestSuite/TestSuite/Optimization/Combined.hs
@@ -24,7 +24,6 @@
     , goldenVsStringShow "pareto1"   (optimize (Pareto Nothing)   pareto1)
     , goldenVsStringShow "pareto2"   (optimize (Pareto (Just 30)) pareto2)
     , goldenVsStringShow "pareto3"   (optimize (Pareto Nothing)   pareto3)
-    , goldenVsStringShow "boxed1"    (optimize Independent        boxed1)
     ]
 
 combined1 :: Goal
@@ -84,19 +83,5 @@
 
              minimize "min_x"            x
              maximize "max_x_plus_x"   $ x + x
-
-boxed1 :: Goal
-boxed1 = do x <- sReal "x"
-            y <- sReal "y"
-
-            constrain $ 5 .>= x-y
-            constrain $ x .>= 0
-            constrain $ 4 .>= y
-            constrain $ y .> 0
-
-            minimize "min_x"        x
-            maximize "max_x_plus_y" (x + y)
-            minimize "min_y"        y
-            maximize "max_y"        y
 
 {-# ANN module ("HLint: ignore Reduce duplication" :: String) #-}
diff --git a/SBVTestSuite/TestSuite/Optimization/ExtensionField.hs b/SBVTestSuite/TestSuite/Optimization/ExtensionField.hs
--- a/SBVTestSuite/TestSuite/Optimization/ExtensionField.hs
+++ b/SBVTestSuite/TestSuite/Optimization/ExtensionField.hs
@@ -47,8 +47,8 @@
 optExtField3 = do x <- sReal "x"
                   y <- sReal "y"
 
-                  constrain $ x .< 4
-                  constrain $ y .< 5
+                  constrain $ x .<= 4
+                  constrain $ y .<= 5
 
                   maximize "x_plus_y" $ x + y
 
diff --git a/SBVTestSuite/TestSuite/Queries/FreshVars.hs b/SBVTestSuite/TestSuite/Queries/FreshVars.hs
--- a/SBVTestSuite/TestSuite/Queries/FreshVars.hs
+++ b/SBVTestSuite/TestSuite/Queries/FreshVars.hs
@@ -87,19 +87,14 @@
                    constrain $ fpIsPositive vQuad
 
                    vSArray  :: SArray    Integer Integer <- freshArray "vSArray" Nothing
-                   vFArray  :: SFunArray Bool    Char    <- freshArray "vFArray" Nothing
                    vi1                                   <- freshVar "i1"
                    vi2                                   <- freshVar "i2"
                    constrain $ readArray vSArray vi1 .== 2
-                   constrain $ readArray vFArray vi2 .== literal 'a'
 
                    viSArray  :: SArray    Integer Integer <- freshArray "viSArray" (Just (literal 42))
-                   viFArray  :: SFunArray Bool    Char    <- freshArray "viFArray" (Just (literal 'X'))
                    mustBe42                               <- freshVar "mustBe42"
-                   mustBeX                                <- freshVar "mustBeX"
 
                    constrain $ readArray viSArray 96     .== mustBe42
-                   constrain $ readArray viFArray sFalse .== mustBeX
                    constrain $ vi1 .== 1
                    constrain $ sNot vi2
 
@@ -135,7 +130,6 @@
                                vi1Val      <- getValue vi1
                                vi2Val      <- getValue vi2
                                mustBe42Val <- getValue mustBe42
-                               mustBeXVal  <- getValue mustBeX
                                vStringVal  <- getValue vString
                                vList1Val   <- getValue vList1
                                vList2Val   <- getValue vList2
@@ -162,7 +156,6 @@
                                            , vi1        |-> vi1Val
                                            , vi2        |-> vi2Val
                                            , mustBe42   |-> mustBe42Val
-                                           , mustBeX    |-> mustBeXVal
                                            , vString    |-> vStringVal
                                            , vList1     |-> vList1Val
                                            , vList2     |-> vList2Val
diff --git a/SBVTestSuite/TestSuite/Uninterpreted/AUF.hs b/SBVTestSuite/TestSuite/Uninterpreted/AUF.hs
--- a/SBVTestSuite/TestSuite/Uninterpreted/AUF.hs
+++ b/SBVTestSuite/TestSuite/Uninterpreted/AUF.hs
@@ -21,8 +21,6 @@
 tests :: TestTree
 tests =
   testGroup "Uninterpreted.AUF"
-    [ goldenVsStringShow "auf-0" $ runSAT      $ newArray "a" Nothing >>= \a -> free "x" >>= \x -> free "y" >>= \y -> output (thm x y (a :: SFunArray  Word32 Word32))
-    , goldenVsStringShow "auf-1" $ runSAT      $ newArray "a" Nothing >>= \a -> free "x" >>= \x -> free "y" >>= \y -> output (thm x y (a :: SArray     Word32 Word32))
+    [ goldenVsStringShow "auf-1" $ runSAT      $ newArray "a" Nothing >>= \a -> free "x" >>= \x -> free "y" >>= \y -> output (thm x y (a :: SArray     Word32 Word32))
     , testCase "tc_auf-0"        $ assertIsThm $ newArray "a" Nothing >>= \a -> free "x" >>= \x -> free "y" >>= \y -> return (thm x y (a :: SArray     Word32 Word32))
-    , testCase "tc_auf-1"        $ assertIsThm $ newArray "a" Nothing >>= \a -> free "x" >>= \x -> free "y" >>= \y -> return (thm x y (a :: SFunArray  Word32 Word32))
     ]
diff --git a/sbv.cabal b/sbv.cabal
--- a/sbv.cabal
+++ b/sbv.cabal
@@ -1,20 +1,20 @@
 Cabal-Version: 2.2
 
 Name        : sbv
-Version     : 8.14
+Version     : 8.15
 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
                (Satisfiability Modulo Theories) solvers.
                .
-               For details, please see: <http://leventerkok.github.com/sbv/>
+               For details, please see: <http://leventerkok.github.io/sbv/>
 
 Copyright          : Levent Erkok, 2010-2021
 License            : BSD-3-Clause
 License-file       : LICENSE
 Stability          : Experimental
 Author             : Levent Erkok
-Homepage           : http://leventerkok.github.com/sbv/
+Homepage           : http://leventerkok.github.io/sbv/
 Bug-reports        : http://github.com/LeventErkok/sbv/issues
 Maintainer         : Levent Erkok (erkokl@gmail.com)
 Build-Type         : Simple
