首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >z3:科学表示法的集合逻辑意外行为

z3:科学表示法的集合逻辑意外行为
EN

Stack Overflow用户
提问于 2016-09-20 17:04:16
回答 1查看 306关注 0票数 1

当我用以下代码调用z3

代码语言:javascript
复制
    (declare-const x Real)
    (assert (> x (* -1.79769 (^ 10.0 308.0))))
    (check-sat)
    (get-model)

然后,我得到了预期的(和right)的答案:

代码语言:javascript
复制
    sat
    (model 
      (define-fun x () Real
        (+ 1.0 (* (- (/ 179769.0 100000.0)) (^ 10.0 308.0))))
    )

但有时我需要解决更复杂的问题,需要指定一个逻辑来获得正确的结果,比如AUFNIRA (它支持整数/实和线性/非线性算法)。

但是,这些特定的逻辑都不支持我在这里使用的科学表示法(),我在这里输入了像(* -1.7 (^ 10.0 308.0))这样的值(一般科学表示法中只表示-1.7e308 )。

特别是,如果我只是添加一个获得下面代码的set-logic命令

代码语言:javascript
复制
    (set-logic AUFNIRA)
    (declare-const x Real)
    (assert (> x (* -1.79769 (^ 10.0 308.0))))
    (check-sat)
    (get-model)

然后,我得到以下错误

代码语言:javascript
复制
    (error "line 3 column 38: unknown function/constant ^")
    sat
    (model 
    )

(注意空模型)。

我的问题是:如果不指定逻辑,求解器怎么可能支持power运算符^并返回正确的解决方案,但是如果我试图指定任何逻辑,则会返回此错误。

我的意思是,如果它在没有指定逻辑的情况下工作,它意味着某些逻辑必须包含它,对吗?如果是,哪个逻辑包含这个运算符?

根据this question,我尝试了以下所有逻辑:

BOOL,LIA,上帝军,NIA,NRA,QF_LRA,QF_NIA,QF_NRA,QF_UFLIA,QF_UFLRA,QF_UFNIA,QF_UFNRA,UFLIRA,UF上帝军,UFNIA,AUFNIRA

(是的,即使是无关紧要的),但他们似乎都不支持电力运营商。这怎麽可能?

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-20 17:11:04

SMT-LIB逻辑在smtlib.org中指定.power操作符不是任何SMT-LIB逻辑的一部分,因此解析器拒绝这些操作符。指定SMT逻辑时的期望是,求解程序根据所支持的片段进行操作。对于运算符(例如^),除非第二个参数是非负整数,否则不存在一般决策过程。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39599945

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档