Giter VIP home page Giter VIP logo

sylvan's Introduction

Sylvan

License CI testing

Sylvan is a parallel (multi-core) multi-terminal binary decision diagram library written in C. Sylvan implements typical binary decision diagram operations also found in libraries like CUDD, but provides scalable parallel execution of these operations and is more versatile thanks to supporting custom decision diagram terminal types.

The main author of Sylvan is Tom van Dijk who can be reached via [email protected].

Table of Contents

Features

Sylvan implements operations on binary decision diagrams supporting any kind of terminal:

  • standard Boolean True/False, that is, ordinary BDDs
  • integers, such as a function from a Boolean domain to long integers
  • floating points, thus representing functions from a Boolean domain to real numbers
  • any user-defined types, by storing 64-bit pointers in the leaves
  • as an example, Sylvan has prototype support of GMP rationals (see sylvan_gmp.c)

Apart from ordinary binary decision diagrams, where each node has a two children depending on the value of some Boolean variable, Sylvan also implements operations on so-called list decision diagrams, which are a kind of multi-way decision diagrams.

Support for zero-suppressed decision diagrams (ZDDs) and tagged BDDs (TBDDs) is available in the branches zdd and tbdd and will eventually be merged with the master branch.

The key feature of Sylvan is its auto-parallelization. Sylvan operations are run on the Lace framework which enables fine-grained scalable parallelism. With little extra effort from the user of Sylvan, the Lace framework ensures that Sylvan operations are actually performed by multiple threads. Furthermore, Sylvan is thread-safe, i.e., multiple operations can be offered to the framework simultaneously.

Dependencies

The most important dependency of Sylvan is currently part of the library, which is Lace. In order to use Sylvan, Lace must be running.

If the GMP library (e.g. libgmp-dev) is found, Sylvan will build with support for GMP terminals.

Usage

Simply build the project with CMake.

The /examples folder contains a number of example programs that use Sylvan.

Example program Description
bddmc Compute reachable states of a labeled transition system as BDD
lddmc Compute reachable states of a labeled transition system as LDD
ldd2bdd Convert LDD file to BDD file (labeled transition systems)
ldd2meddly Convert LDD file to Meddly file (for comparisons to Meddly)
nqueens Count the solutions to the N Queens problem

It is possible to use Sylvan from other languages. Sylvan contains a prototype C++ bridge. Bindings for other languages than C/C++ also exist:

Documentation

Documentation is available on GitHub Pages.

License

Sylvan was initially developed at the Formal Methods and Tools group at the University of Twente as part of the MaDriD project, which was funded by NWO, and further by the Formal Methods and Verification group at the Johannes Kepler University Linz as part of the RiSE project.

Sylvan is licensed with the Apache 2.0 license.

Please let us know if you use Sylvan in your projects and if you need decision diagram operations that are currently not implemented in Sylvan.

The main repository of Sylvan is https://github.com/trolando/sylvan.

Publications

T. van Dijk (2016) Sylvan: Multi-core Decision Diagrams. PhD Thesis.

T. van Dijk and J.C. van de Pol (2016) Sylvan: Multi-core Framework for Decision Diagrams. In: STTT (Special Issue), Springer.

T. van Dijk and J. van de Pol (2015) Sylvan: Multi-core Decision Diagrams. In: TACAS 2015, LNCS 9035. Springer.

T. van Dijk and A.W. Laarman and J. van de Pol (2012) Multi-Core BDD Operations for Symbolic Reachability. In: PDMC 2012, ENTCS. Elsevier.

sylvan's People

Contributors

trolando avatar meijuh avatar johnyf avatar alaarman avatar dopefishh avatar naum-tomov avatar volkm avatar daemontus avatar ssoelvsten avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.