anchor.diff:                      (Exact (typedBoolToType dstE))
                       (Exact (typedBoolToType srcE)))
   
  -    bind2 modelWithExprs
  -        (modelBoolLValue ctx.SharedVars ctx.ThreadVars id dest)
  -        (wrapMessages BadExpr (modelBoolExpr ctx.ThreadVars ctx.ThreadVars id) src)
  +    // for symbolics, use combined environment for input variables
  +    match combine ctx.ThreadVars ctx.SharedVars with
  +    | Bad []            -> Bad []
  +    | Bad (x :: xs)     ->   mergeMessages (List.map SymVarError xs) <| fail (SymVarError x)
  +    | Ok(rv, _) ->
  +        bind2 modelWithExprs
  +            (modelBoolLValue ctx.SharedVars ctx.ThreadVars id dest)
  +            (modelBoolLValueOrSymbol rv ctx.ThreadVars id src)
   
   /// Converts an integral store to a Prim.
   let modelIntStore
  
positive.code:     | RValue r -> fail (NeedLValue r)
      | LValue l -> wrapMessages BadExpr (modelBoolExpr env idxEnv marker) l
  
  /// <summary>
  ///     Models an integer lvalue given a potentially valid expression and
  ///     environment.
  
negative.code:                     (Exact (typedIntToType dstE))
                      (Exact (typedIntToType srcE)))
  
      // for symbolics, use combined environment for input variables
      match combine ctx.ThreadVars ctx.SharedVars with
      // { there might be a nicer way of doing this
      | Bad []            -> Bad []
  