isla-cat

Crates.ioisla-cat
lib.rsisla-cat
version0.2.0
sourcesrc
created_at2020-06-05 14:22:03.088558
updated_at2021-02-25 14:50:55.524211
descriptionIsla is a symbolic execution engine for Sail instruction set architecture specifications. This crate implements a SMT translator for subset of the cat language used by herd7 to specify relaxed memory models.
homepagehttps://github.com/rems-project/isla
repositoryhttps://github.com/rems-project/isla
max_upload_size
id250351
size80,331
Alasdair Armstrong (Alasdair)

documentation

README

isla-cat 🐱

isla-cat is a Rust library for converting the cat files used by herd to describe hardware relaxed memory models into a form suitable for use with SMT solvers such as Z3 and CVC4.

It also contains a small binary cat2smt which translates such cat files on the command line.

Documentation for the cat language can be found here.

Licensing

The .cat files in the catlib subdirectory are licensed under the CeCILL-B license from herd.

The .cat files in the tests directory are likewise licensed under the CeCILL-B license, except aarch64.cat which is under a 3-clause BSD license from ARM Ltd.

Limitations

cat has some features which are not easy (or even possible at all) to translate into SMT. Roughly-speaking, this supports the fragment of cat that defines sets and relations over events. More formally the fragment of cat we support is defined by the grammar:

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
Commit count: 1036

cargo fmt