将 Haskell Int 值转换为 SBV 约束的常量

Turning Haskell Int values into Constants for SBV constraints

我看到很多像这样使用 SBV 库的例子:

f :: IO SatResult
f = sat $ do
      x <- sInteger "x"
      constraint $ x .< 200

对于接受 Haskell Int 的函数,我想在通过 Data.SBV 库传递给 Z3 的约束公式中使用该 Int:

f :: Int -> IO SatResult
f i = sat $ do
          x <- sInteger "x"
          constraint $ x .< (g i)
        where
          g = ???

如何将 Haskell Int 转换为 SInteger 或 OrdSymbolic 和 EqSymbolic 的某些适当实例以与 (.<) 和 (.==) 一起使用?

谢谢!

函数literal应该可以做到。不过,您可能需要更清楚地了解类型,例如 IntegerInt8Int16 等,而不仅仅是 Int.

您也可以只做 fromIntegral,因为数字符号类型是 Num class:

的实例
Prelude Data.SBV> (fromIntegral (2::Int)) :: SInteger
2 :: SInteger