Z3 SMT中浮点运算的位爆破实现

Z3 SMT中浮点运算的位爆破实现,z3,smt,cvc4,Z3,Smt,Cvc4,我想知道人们是如何实施一点爆破的 SMT解算器中的浮点算术构造。有 任何现有的库或设施(VHDL,…),或 它们是从头开始实现的吗?这代表了多少人 (C?C++)代码行?< /P> 提前感谢。SMT解算器中还没有“很多”实现,但Z3是实现一切的工具之一。代码在中,它是相当自解释的。对于大部分代码,我从Mueller和Paul的《计算机体系结构》一书中得到了灵感,这本书有一章介绍浮点电路。《浮点运算手册》(Muller等人)也提供了大量信息/程序/电路 SMT解算器中还没有“很多”实现,但Z3是实

我想知道人们是如何实施一点爆破的 SMT解算器中的浮点算术构造。有 任何现有的库或设施(VHDL,…),或 它们是从头开始实现的吗?这代表了多少人 (C?C++)代码行?< /P>
提前感谢。

SMT解算器中还没有“很多”实现,但Z3是实现一切的工具之一。代码在中,它是相当自解释的。对于大部分代码,我从Mueller和Paul的《计算机体系结构》一书中得到了灵感,这本书有一章介绍浮点电路。《浮点运算手册》(Muller等人)也提供了大量信息/程序/电路

SMT解算器中还没有“很多”实现,但Z3是实现一切的工具之一。代码在中,它是相当自解释的。对于大部分代码,我从Mueller和Paul的《计算机体系结构》一书中得到了灵感,这本书有一章介绍浮点电路。《浮点运算手册》(Muller等人)也提供了大量信息/程序/电路

据我所知,存在以下实施:

CBMC(并非严格意义上的SMT解算器,但包含必要的位)

<>在C++中大致为2kLoC(但在所有的位向量运算中都建立在实用函数的顶部,这是另一个2kLoc)。我相信它最初是从米勒和保罗的书中写出来的。ESBMC包含此代码早期版本的分支

Z3 见上面克里斯托夫的回答。在Z3中有一个早期的原型实现,它是“受”CBMC实现的启发,但这被时间的迷雾所遗忘

马萨特 来源不可用,实施“受”CBMC的启发,因此在规模上相似,等等

CVC4 我的CVC4分支之一:

有一个位爆破浮点引擎。它是作为一个“独立”库编写的(参见src/symfpu-我会给出完整的链接,但github阻止每个帖子有两个以上的链接…),将分别发布。。。很快。它在“后端”中参数化,因此可以用作任意精度浮点库,为不同的解算器生成位向量表达式等。它大约有3.5KLoC代码,但包含一些操作的多个实现。它是从零开始写的(尽管我读过浮点手册)

响亮的

源不可用,我相信它是用C++实现的,有一种感觉,有人告诉我它是基于缪勒和保罗的书。 请注意,已经进行了多次认真的独立工作来(交叉)验证和验证这些实现。我不会说一切都是完美的(我们仍在努力获得对余数和FMA的充分信心),但你应该发现它们没有明显的错误


您可以使用VHDL或Verilog设计,但。。。使一个好的可合成FPU(不一定)成为一个好的编码的东西。我知道有些人使用SoftFloat作为实现源,但类似的评论也适用。

据我所知,存在以下实现:

CBMC(并非严格意义上的SMT解算器,但包含必要的位)

<>在C++中大致为2kLoC(但在所有的位向量运算中都建立在实用函数的顶部,这是另一个2kLoc)。我相信它最初是从米勒和保罗的书中写出来的。ESBMC包含此代码早期版本的分支

Z3 见上面克里斯托夫的回答。在Z3中有一个早期的原型实现,它是“受”CBMC实现的启发,但这被时间的迷雾所遗忘

马萨特 来源不可用,实施“受”CBMC的启发,因此在规模上相似,等等

CVC4 我的CVC4分支之一:

有一个位爆破浮点引擎。它是作为一个“独立”库编写的(参见src/symfpu-我会给出完整的链接,但github阻止每个帖子有两个以上的链接…),将分别发布。。。很快。它在“后端”中参数化,因此可以用作任意精度浮点库,为不同的解算器生成位向量表达式等。它大约有3.5KLoC代码,但包含一些操作的多个实现。它是从零开始写的(尽管我读过浮点手册)

响亮的

源不可用,我相信它是用C++实现的,有一种感觉,有人告诉我它是基于缪勒和保罗的书。 请注意,已经进行了多次认真的独立工作来(交叉)验证和验证这些实现。我不会说一切都是完美的(我们仍在努力获得对余数和FMA的充分信心),但你应该发现它们没有明显的错误


您可以使用VHDL或Verilog设计,但。。。使一个好的可合成FPU(不一定)成为一个好的编码的东西。我知道有些人使用SoftFloat作为实现源,但类似的评论也适用。

感谢您的快速回答。代码很容易理解,而且很短(我希望有更大的代码)。从BV到SAT的转换如何?大部分BV到SAT的转换在这里:。它要求首先运行简化程序,以去除一些未在bit blaster中实现的运算符,但这是一个细节。感谢您的快速回答。代码很容易理解,而且很短(我希望有更大的代码)。从BV到SAT的转换如何?大部分BV到SAT的转换在这里:。它要求首先运行简化程序,以去除一些未在bit blaster中实现的运算符,但这只是一个细节。感谢您的解释。我将尝试详细了解实现和相关书籍