Haskell 中 SBV Solver 中没有变量的简单有理数问题
Trivial Rationals problems without variables in SBV Solver in Haskell
我在 Haskell 中使用 SBV Solver,特别是我使用 Rational 类型作为变量。
我想解决线性问题,例如:
solution1 = do
[x] <- sRationals ["x"]
constrain $ 5.%1 .<= x
代码没有问题,我的问题是当我想解决类型 5 <= 4 的“琐碎”案例时
如果它适用于整数我没问题,我可以使用以下代码;
solution2 = do
xs <- sIntegers []
constrain $ (5 :: SInteger) .<= (5 :: SInteger)
这段代码没有问题
如果我尝试使用 Rationals 的等价物:
solution3 = do
xs <- sRationals []
constrain $ (5.%1:: SRational) .<= (5.%1:: SRational)
解决方案 3 不起作用,它 returns
*** Exception: SBV.liftCV2: impossible, incompatible args received: (5 % 1 :: Rational,5 % 1 :: Rational)
CallStack (from HasCallStack):
error, called at ./Data/SBV/Core/Concrete.hs:337:74 in sbv-8.15-6kqa1q33xxwHQg8FGWAWlC:Data.SBV.Core.Concrete
我可以引入一个虚拟变量。
solution = do
[dummy] <- sRationals ["dummy"]
constrain $ dummy .== 0.%1
constrain $ (5.%1:: SRational) .<= (5.%1:: SRational) + dummy
也可以,但是我想知道不引入这个变量是否可以做到。
当然不用SBV Solver我也能解决问题,但是在出现这个问题的上下文中,我更容易从solver解决
提前致谢,抱歉我的英语不好,我使用 google 翻译来帮助我
这似乎是一个错误,我想 SBV 的作者在这个模式匹配中忘记了 CRational:
我在 Haskell 中使用 SBV Solver,特别是我使用 Rational 类型作为变量。
我想解决线性问题,例如:
solution1 = do
[x] <- sRationals ["x"]
constrain $ 5.%1 .<= x
代码没有问题,我的问题是当我想解决类型 5 <= 4 的“琐碎”案例时 如果它适用于整数我没问题,我可以使用以下代码;
solution2 = do
xs <- sIntegers []
constrain $ (5 :: SInteger) .<= (5 :: SInteger)
这段代码没有问题
如果我尝试使用 Rationals 的等价物:
solution3 = do
xs <- sRationals []
constrain $ (5.%1:: SRational) .<= (5.%1:: SRational)
解决方案 3 不起作用,它 returns
*** Exception: SBV.liftCV2: impossible, incompatible args received: (5 % 1 :: Rational,5 % 1 :: Rational)
CallStack (from HasCallStack):
error, called at ./Data/SBV/Core/Concrete.hs:337:74 in sbv-8.15-6kqa1q33xxwHQg8FGWAWlC:Data.SBV.Core.Concrete
我可以引入一个虚拟变量。
solution = do
[dummy] <- sRationals ["dummy"]
constrain $ dummy .== 0.%1
constrain $ (5.%1:: SRational) .<= (5.%1:: SRational) + dummy
也可以,但是我想知道不引入这个变量是否可以做到。
当然不用SBV Solver我也能解决问题,但是在出现这个问题的上下文中,我更容易从solver解决
提前致谢,抱歉我的英语不好,我使用 google 翻译来帮助我
这似乎是一个错误,我想 SBV 的作者在这个模式匹配中忘记了 CRational: