#cat #specification #smt-solver #instructions #models #language #set

isla-cat

Isla 是一个用于Sail指令集架构规范的症状执行引擎。这个crate实现了一个SMT翻译器,用于herd7在指定松散内存模型时使用的cat语言子集。

2个不稳定版本

0.2.0 2021年2月25日
0.1.0 2020年6月5日

#788硬件支持


2 crate 中使用

BSD-2-Clause

62KB
1.5K SLoC

isla-cat 🐱

isla-cat 是一个Rust库,用于将用于描述硬件松散内存模型的herd(herd)的cat文件转换为适用于Z3和CVC4等SMT求解器的形式。

它还包含一个小型二进制程序 cat2smt,该程序可以在命令行上翻译此类cat文件。

关于cat语言的文档可以在 这里 找到。

许可

catlib子目录中的 .cat 文件在herd(LICENSE.txt)下采用CeCILL-B许可。

tests目录中的 .cat 文件同样在CeCILL-B许可下,但 aarch64.cat 在ARM Ltd.下采用3-clause BSD许可。

限制

cat有一些特性不易(甚至根本不可能)转换为SMT。粗略地说,这支持定义事件集合和关系的cat片段。更正式地说,我们支持的cat片段由以下语法定义

expr ::= 0
       | id
       | expr? | expr^-1
       | ~expr
       | [expr]
       | expr | expr
       | expr ; expr | expr \ expr | expr & expr | expr * expr
       | expr expr
       | let id = expr in expr
       | ( expr )

binding ::= id = expr

closure_binding ::= id = expr^+
                  | id = expr^*

id ::= [a-zA-Z_][0-9a-z_.-]*

def ::= let binding { and binding }
      | let closure_binding
      | let funbinding
      | include string
      | show expr as id
      | show id {, id }
      | unshow id {, id }
      | [ flag ] check expr [ as id ]

funbinding ::= id ( id ) = expr

check ::= checkname | ~checkname

checkname ::= acyclic | irreflexive | empty

依赖

~2.2–4.5MB
~72K SLoC