- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想使用 Z3 C API 解决包含量词的约束。
我正在努力使用诸如“Z3_mk_exists()”之类的函数,因为我在网上或 tar 文件的测试示例中都找不到任何示例。
我并不完全理解这些函数所需的所有参数以及它们的确切意义。
任何人都可以帮忙吗?
谢谢。
考斯图布。
最佳答案
这是一个带有通用量词的完整示例。评论是内联的:
Z3_config cfg = Z3_mk_config();
Z3_set_param_value(cfg, "MODEL", "true");
Z3_context ctx = Z3_mk_context(cfg);
Z3_sort intSort = Z3_mk_int_sort(ctx);
/* Some constant integers */
Z3_ast zero = Z3_mk_int(ctx, 0, intSort);
Z3_ast one = Z3_mk_int(ctx, 1, intSort);
Z3_ast two = Z3_mk_int(ctx, 2, intSort);
Z3_ast three = Z3_mk_int(ctx, 3, intSort);
Z3_ast four = Z3_mk_int(ctx, 4, intSort);
Z3_ast five = Z3_mk_int(ctx, 5, intSort);
fib(n)
.我们将用一个通用量词来指定它的含义。
Z3_func_decl fibonacci = Z3_mk_fresh_func_decl(ctx, "fib", 1, &intSort, intSort);
/* fib(0) and fib(1) */
Z3_ast fzero = Z3_mk_app(ctx, fibonacci, 1, &zero);
Z3_ast fone = Z3_mk_app(ctx, fibonacci, 1, &one);
fib(n)
的含义.基本情况不需要量词。我们有
fib(0) = 0
和
fib(1) = 1
.
Z3_ast fib0 = Z3_mk_eq(ctx, fzero, zero);
Z3_ast fib1 = Z3_mk_eq(ctx, fone, one);
0
开始.在这种情况下,我们只有一个。
Z3_ast x = Z3_mk_bound(ctx, 0, intSort);
fib(_)
, 其中
_
是绑定(bind)变量。
Z3_ast fibX = Z3_mk_app(ctx, fibonacci, 1, &x);
fib(_)
再次。这意味着(或多或少)Z3 将在看到
fib("some term")
时实例化公理。 .
Z3_pattern pattern = Z3_mk_pattern(ctx, 1, &fibX);
_
命名。 .
Z3_symbol someName = Z3_mk_int_symbol(ctx, 0);
/* _ > 1 */
Z3_ast xGTone = Z3_mk_gt(ctx, x, one);
Z3_ast xOne[2] = { x, one };
Z3_ast xTwo[2] = { x, two };
/* _ - 1 */
Z3_ast fibXminusOne = Z3_mk_sub(ctx, 2, xOne);
/* _ - 2 */
Z3_ast fibXminusTwo = Z3_mk_sub(ctx, 2, xTwo);
Z3_ast toSum[2] = { Z3_mk_app(ctx, fibonacci, 1, &fibXminusOne), Z3_mk_app(ctx, fibonacci, 1, &fibXminusTwo) };
/* f(_ - 1) + f(_ - 2) */
Z3_ast fibSum = Z3_mk_add(ctx, 2, toSum);
_ > 1 => (fib(_) = fib(_ - 1) + fib(_ - 2)
,其中 _ 是绑定(bind)变量。
Z3_ast axiomTree = Z3_mk_implies(ctx, xGTone, Z3_mk_eq(ctx, fibX, fibSum));
Z3_TRUE
说它是一个 forall 量词)。
0
在参数列表中指定优先级。 Z3 文档建议使用
0
如果你不知道该放什么。
Z3_ast fibN = Z3_mk_quantifier(ctx, Z3_TRUE, 0, 1, &pattern, 1, &intSort, &someName, axiomTree);
Z3_assert_cnstr(ctx, fib0);
Z3_assert_cnstr(ctx, fib1);
Z3_assert_cnstr(ctx, fibN);
关于z3 - 量词的 C API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9777381/
我是正则表达式的新手,我正在浏览 the regex quantifier section .我对 * 量词有疑问。下面是 * 量词的定义: X* - 没有找到或找到多个字母 X .* - 任何字符序
我想证明以下定理: Theorem Frobenius (A: Set) (q: Prop) (p: A -> Prop) : (q \/ forall x : A, p x) -> (foral
例子: /(?:Foo){0}bar/ 我在另一个答案中看到了类似的内容。起初我想“那应该是什么”,但后来,“好吧,有点消极的看法”,所以 Foo之前不允许 bar ,但这不起作用。 你可以看到这个
添加/删除“+”不会改变输出。但我也没有收到任何错误。 “+”在这里做什么? /.{3}+/g 最佳答案 “+”在这里无效,可能是你的意思 /(.{3})+/g 关于javascript - 正则表达
基本上我有以下字符串:http:/www.-woejfewiofjewow不允许匹配 我的正则表达式:http://(www\.[^-])?[^-].* (我用 regexr.com 来检查它..)
我的正则表达式以量词 * 结尾。但是我在字符串中几乎没有匹配项。我怎样才能让它仍然找到所有匹配项?我的正则表达式: ((CMD1|CMD2)+(?::|;)+.*) 测试字符串为"cmd1: test
关于Eloquent JavaScript这本书chapter 9: Regular Expressions在“解析 INI 文件”部分下有一个示例,其中包含一个我根本听不懂的正则表达式。作者正在尝试
假设我们有一个类型构造函数 f,它通过 DataKinds-promoted 对接受两种类型。 forall (f :: (ka, kb) -> *) 然后我可以实现一个函数 forward ,就像
有forAll量词返回一个检查所有测试用例是否通过的属性。有没有办法定义一个“存在”量词,它返回一个属性来检查它至少一个测试用例是否通过? 最佳答案 通过枚举测试存在会更可靠:SmallCheck ,
我可以知道以下代码的输出为:1,10,10 的原因吗?为什么不是这样:10, 10? var str="1, 100 or 1000?"; var patt1=/10?/g; document.wr
我要匹配模式的表达式 空格后跟(加法运算符或减法运算符) 例如:"+" 应该返回 True 我已经尝试在以下正则 exp 上使用 std::regex_match: "[+-]", "\\s[+-]"
我想不出我想使用 ?? 的情况在正则表达式中,但也许我想得还不够仔细。 最佳答案 也许是一个分隔符分隔的列表,并且您不想匹配任何终止分隔符。 ^((?:[^,]+,??)+),?$ 那将捕获 "a,b
当我尝试 Regex.Replace() 方法时失败。我该如何解决? Replace.Method (String, String, MatchEvaluator, RegexOptions) 我试试
正则表达式{n,m}量词: {n,m}量词可以重复前面匹配的字符n-m次,至少n次,最多m次。 语法结构: 构造函数方式: ?
当我声明这个新类型时: newtype ListScott a = ListScott { unconsScott :: (a -> ListScott a -> r) -> r -> r }
我是正则表达式的新手,我想找到“po”的所有实例及其变体(即“p.o. | p.o. | p o”)后跟“box”的变体,因为我很感兴趣在采购订单中,而不是在邮政信箱中。下面的代码不起作用,即使它后面
大家好。 我有以下结构和类, template struct Node { T DataMember; Node* Next; }; template class NCA {
在下面的代码中,如何让 Specs2 执行第一个测试? “print ones”测试在它应该失败的时候通过了。由于 new Scope,forAll() 部分中的代码未执行。 println 语句仅用
我是一名优秀的程序员,十分优秀!