#z3 #smt #solver #log-file

bin+lib z3tracer

Z3跟踪日志解析器

15个版本 (重大变化)

0.11.2 2021年8月30日
0.11.1 2021年6月9日
0.11.0 2021年5月12日
0.7.0 2021年3月24日

科学类别中排名第900

Download history 1646/week @ 2024-03-14 1350/week @ 2024-03-21 1338/week @ 2024-03-28 1553/week @ 2024-04-04 1287/week @ 2024-04-11 1445/week @ 2024-04-18 1589/week @ 2024-04-25 1262/week @ 2024-05-02 1810/week @ 2024-05-09 1847/week @ 2024-05-16 1767/week @ 2024-05-23 1742/week @ 2024-05-30 1976/week @ 2024-06-06 3109/week @ 2024-06-13 2805/week @ 2024-06-20 1790/week @ 2024-06-27

每月下载量9,988
用于prover-lab

MIT/Apache

7MB
8K SLoC

z3tracer

z3tracer on crates.io Documentation License License

此库提供对Z3生成的详细日志文件的实验性解析器和分析器。

要获取文件z3.log,请在Z3的命令行上传递选项trace=trueproof=true(例如,z3 trace=true proof=true file.smt2)。对于大型问题,您可以选择通过中断z3(例如,使用^C或设置较短的超时)来限制日志文件的大小。仅传递trace=true也是可能的,但这将防止任何依赖分析(见下文)。

在解析日志的同时,将构建一个日志“模型”,以记录大多数操作,以及每个#NUM符号下的句法术语

use z3tracer::{Model, syntax::{Ident, Term}};
let mut model = Model::default();
let input = br#"
[mk-app] #0 a
[mk-app] #1 + #0 #0
[eof]
"#;
model.process(None, &input[1..])?;
assert_eq!(model.terms().len(), 2);
assert!(matches!(model.term(&Ident::from_str("#1")?)?, Term::App { .. }));
assert_eq!(model.id_to_sexp(&BTreeMap::new(), &Ident::from_str("#1").unwrap()).unwrap(), "(+ a a)");

此外,库将尝试重建以下信息

  • 量词实例化(QIs),即Z3实例化了哪些量化公式以及原因;

  • SMT求解过程中的连续回溯级别;

  • SAT/SMT冲突及其在QIs方面的因果关系; 冲突

  • QIs之间的因果关系。 QIs之间的因果关系

提供了一个基于库的工具z3tracer,用于从命令行处理日志文件z3.log并生成图表。

有关使用Jupyter笔记本的更多示例,请参阅存储库

目前,此库仅支持Z3 v4.8.9。

有关Z3跟踪日志的更多信息,请参阅项目Axiom Profiler的文档。

贡献

查看CONTRIBUTING文件了解如何提供帮助。

许可证

该项目可以在以下许可证的条款下使用:Apache 2.0许可证或MIT许可证。

依赖项

约~6-10MB
约143K SLoC