Code Monkey home page Code Monkey logo

munta's Introduction

MUNTA -- Fully Verified Model Checker for Timed Automata

Introduction

MUNTA is

  • a model checker for the popular realtime systems modeling formalism of Timed Automata
  • formally verified with Isabelle/HOL: there is a machine-checked proof that it only computes correct results!

MUNTA is at an early stage of development. Nevertheless, you can:

  • run the model checker on a number of benchmarks
  • browse the Isabelle/HOL proof
  • try its graphical user interface here

Graphical User Interface

MUNTA now features a graphical user interface:

Building

The following instructions should work on all Unix systems.

To build the checker:

Install the MLton compiler. Then run:

cd ML
make

To browse the sources interactively in Isabelle:

Install Isabelle and the AFP. Then run:

isabelle jedit -l Refine_Imperative_HOL

and open one of the .thy files. A good starting point is the file where the model checker is exported to executable code: Simple_Networks/Simple_Network_Language_Export_Code.thy.

To build the Isabelle sources and extract the checker source code:

Install Isabelle and the AFP. Then run:

isabelle build -d . TA_Code

and build the checker as described above.

Verification Server

After building, you can run the verification server via:

cd ML
python2 server.py

The server will run under port 3069 and communicates with the GUI.

Running

Pick one of the .muntax files from benchmarks and run:

ML/munta -m benchmarks/<the_benchmark>.muntax

To list MUNTA's command line options, run:

ML/munta -h

Documentation

Input Format

MUNTA accepts a simple modeling language, which is formally described in the file Simple_Networks/Simple_Network_Language.thy. Input models and formulas are specified in the JSON format (MUNTA's file ending: .muntax). Examples can be found in the folder benchmarks.

Benchmarks

The benchmarks are derived from the UPPAAL and TChecker benchmarks.

Outdated

The following instructions are outdated and in the progress of being updated:

Input Format

MUNTA is aimed at understanding bytecode produced by UPPAAL. However, for the time being, this bytecode needs to be pre-processed slightly. You can find some pre-processed benchmarks in benchmarks. The input format is documented in UPPAAL_Asm.thy and ML/Checker.sml.

To build the checker with OCaml:

Replace Big_int with Big_int_Z in UPPAAL_Model_Checker.ml and to_int with int_of_big_int. Then run

cd ML
ocamlfind ocamlopt -package zarith -package angstrom -linkpkg nums.cmxa -linkpkg UPPAAL_Model_Checker.ml -linkpkg Checker.ml

Isabelle Formalizations

Human readable .pdf documents (with textual annotations) of the formalizations can be produced by Isabelle. Run

isabelle build -d . TA
isabelle build -d . TA_All

and you will get the following:

  • output/abstract_reachability.pdf: the abstract formalization of reachability checking for Timed Automata
  • output/model_checking.pdf: the formalization of MUNTA and the route from the abstract formalization to the correctness proof for MUNTA
  • output/abstract_reachability_proofs.pdf, output/model_checking_proofs.pdf: variants of the above documents with proofs

munta's People

Contributors

lammich avatar larsrh avatar wimmers avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

munta's Issues

Support for STORE

The UPPAAL bytecode seems to support a STORE instruction, which puts a value into a register but specifies both arguments on the stack.
This is problematic because it interferes with the current approach to rename registers to a fixed range. To support this instruction, we would need to explicitly add this renumbering to the semantics.

Sharing between passed and wait list

To improve memory consumption, symbolic states can be shared between the passed & wait list.
This requires a low-level verification of the corresponding data structure.

Support for CALL & RETURN

CALL & RETURN are not supported at the moment because we do not have a clue of where they will continue the program execution. Reasons:

  • The current program reachability analysis does not take into account stack content.
  • Renumbering of program locations means that the arguments for CALL and RETURN would have to be renumbered, too. However the arguments are on the stack, so this is hard.

Support for ADD & friends

Instructions that could get stuck in case there are not enough elements on the stack are not supported at the moment.
In principle, this should not be a problem since we can assume that runs do not get stuck for the relevant preconditions that we need to guarantee.

Improved analysis of guaranteed execution

To correctly analyze local clock ceilings, we need to identify the set of clocks that are always reset on a certain edge. The current program analysis for this property is very restrictive. We should improve it by analyzing conditional branches.

Support for broadcast edges

Broadcast edges are a very helpful modeling feature for Timed Automata.
Thus, we should add support for them in Munta by incorporating them into the semantics and the product construction.

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.