小编Ale*_*ers的帖子

触发Z3中的问题

我最近观察到Z3中有关触发的几种行为,我不明白.不幸的是,这些例子来自大型Boogie文件,所以我想我现在抽象地描述它们,只是为了看看是否有明显的答案.但是,如果具体文件会更好,我可以附加它们.

基本上有三个问题,尽管第三个可能是第二个问题的特例.据我所知,没有任何行为是预期的,但也许我错过了一些东西.任何帮助将不胜感激!


首先:就触发而言,我的程序中的琐碎平等似乎被忽略了.例如,if t1是一个应该与量化公理的模式匹配的术语,如果我在表单的Boogie程序中添加一行

assert t1 == t1;
Run Code Online (Sandbox Code Playgroud)

然后t1似乎没有被用作量化公理的触发器.我明确地添加了这一行,以便为t1证明者提供触发器,我经常在Boogie程序中做/做.

相反,如果我引入了额外的功能,比方说

function f(x : same_type_as_t1) : bool
{ true }
Run Code Online (Sandbox Code Playgroud)

现在改为添加一行

assert f(t1);
Run Code Online (Sandbox Code Playgroud)

我的节目,然后t1 似乎被用来作为Z3的触发器.我检查了前程序的Z3翻译,并且(平凡的)平等t1确实在Boogie翻译中存活下来(即,不是Boogie尝试做一些聪明的事情).


其次:次要模式似乎对我不起作用.例如,我有一个程序,其中一个公理有形式

axiom (forall ... :: {t1,t2} {t3,t4,t5} ..... );
Run Code Online (Sandbox Code Playgroud)

和一种情况,t3, t4t5都发生了.程序无法验证,显然是因为公理没有实例化.但是,如果我重写公理为

axiom (forall ... :: {t3,t4,t5} {t1,t2} ..... );
Run Code Online (Sandbox Code Playgroud)

然后程序验证.在这两种情况下,运行Boogie的时间大约为3秒,并且模式可以存活到Z3输出.


第三:这很可能是第二个问题的症状,但我对以下行为感到惊讶:

我写了这个形式的公理

axiom (forall .. :: {t1,t2} .... );

axiom (forall ... :: {t2,t4} {t2,t3} ...some expression involving …
Run Code Online (Sandbox Code Playgroud)

z3

6
推荐指数
1
解决办法
375
查看次数

在编译时(在Scala中)将字符串常量定义为文件内容的简单方法是什么?

我想将Scala val定义为String,其值是文本文件的全部内容,在编译时读取.因此,在编译之后,这应该只是表现为字符串常量.

我觉得这应该是简单的,例如,Scala宏,但到目前为止,我无法弄清楚如何简单地获取String值.

scala

1
推荐指数
1
解决办法
207
查看次数

标签 统计

scala ×1

z3 ×1