Giter Club home page Giter Club logo

poet's Introduction

POET (Partial Order Exploration Tools)

POET (Partial Order Exploration Tools) is a set of state-of-the-art exploration techniques that use partial orders to compactly represent the state space of programs.

Partial order representations are particularly relevant for exploration of concurrent systems, the main motivation of this project.

Wiki

For stable versions and to reproduce experimental results in research papers please consult POET's wiki

Installation (@master)

  1. Install the Haskell Platform.
    Make sure you can run the commands ghc, cabal, and happy.

  2. Install the simple-c package

  3. Install poet: git clone [email protected]:marcelosousa/poet.git cd poet cabal install

This will create the executable poet @ dist/build/poet/

Note that it is likely that master is currently unstable.

More info

There are several available modes:

  1. poet frontend - prints the result of the front-end
  2. poet execute - executes the system with a non-deterministic schedule
  3. poet explore - invokes the explicit-state model checker

For more information, poet --help.

Note: Due to a difference in the Haskell library for command arguments, it may be the case for some operating systems it is required to prefix the input file with -i=.

Also check the repository con-benchmarks for a collection of benchmarks used during the development of POET.

Contact

Marcelo Sousa (msousa at cs dot ox dot ac dot uk). University of Oxford, UK.

poet's People

Stargazers

 avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

poet's Issues

Verify unfolding procedure

Check that the computing alternatives is correct in the presence of programs where transitions disable transitions

has_exited support for conditional exits

Currently, we check if a thread has exited by checking if there are no successors of the current position of the thread. This solution does not work for more complex CFGs. Probably the best solution is to have a boolean variable in the state of a thread that marks whether the thread as already hit the exit/return statement.

Independence Relation Computation

Currently, we are computing unconditional independence relations based on read-write sets. Possible extensions include:

  • Enrich the read-write set with new information: operations, values, variables.
  • Introduce a mode where the independence relation is computed on-the-fly. Is this sound w.r.t to extension function?

Enabledness of threads with the abstract interpreter

In the case of enabledness of the join and mutexes, the implementation was just checking the case where the edge in the CFG was a join and a mutex and making the appropriated changes. However, this is not sufficient because there might be arbitrary local code before such join and mutex lock. There are two options possible:

  1. Consider a thread disabled if it was would reach such edge.
  2. Generate summaries of events that are not global.

Implement widening across multiple executions of collapse

Within a configuration, we would like to apply widening even if multiple executions of collapse have been issued. That is the only way to achieve termination of the analysis.
There are two possibilities to implement this feature:

  1. In the collapse by passing extra information, e.g. the CFG annotated with the previous states.
  2. In the unfolding algorithm, by keeping track per configuration a Map from EventName to IntState.

Symbolic Exploration

Currently, poet is an explicit-state model checker. Modify the execution engine to allow formulas.
This involves a major revision of the current engine:

  • Convert the code to SSA on-the-fly.
  • State is just a Map Variable Value. This needs to be changed so that State can be a Formula.
  • Converter needs to be completely re-written.
  • Independence relation computation?
  • Reduce the problem of checking which transitions are enabled to a satisfiability problem.

Fix enabledeness of threads

Threads are enabled whenever:

  1. It was created: there is a pc associated to the thread id.
  2. It is not in a join statement for an enabled thread: the pc is not a join OR the pc is a join and the thread associated with the join has terminated.
  3. It is not in a lock for a lock that is taken: the pc is not a lock OR it is a lock and the lock is free.

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.