Giter VIP home page Giter VIP logo

ultimate-pa / ultimate Goto Github PK

View Code? Open in Web Editor NEW
192.0 32.0 40.0 840.44 MB

The Ultimate program analysis framework.

Home Page: https://ultimate-pa.org/

Shell 0.67% C 0.22% Python 0.74% Perl 0.05% HTML 0.19% SMT 6.96% Java 88.92% Lex 0.18% Batchfile 0.01% CSS 0.02% JavaScript 0.37% Boogie 0.39% JetBrains MPS 1.28% SCSS 0.01%
program-analysis model-checking ltl reachability termination automata software-analysis

ultimate's Introduction

Ultimate

Build Status Jenkins Build Status Travis LGPL License ZenHub

Ultimate is a program analysis framework. Ultimate consists of several plugins that perform steps of a program analysis, e.g., parsing source code, transforming programs from one representation to another, or analyzing programs. Toolchains of these plugins can perform complex tasks, e.g., verify that a C program fulfills a given specification.

The official website includes a web interface which allows you to use several toolchains online, a list of all developers, and a list of awards Ultimate received over the years.

The available documentation can be found in our wiki.

You can download the latest release from GitHub's release page or try our nightly builds.

Developers

The main active developers of Ultimate are:

  • Matthias Heizmann (@Heizmann)
  • Daniel Dietsch (@danieldietsch)
  • Dominik Klumpp (@maul-esel)
  • Frank Schüssele (@schuessf)

You can find an extensive list of past and current contributors on our website.

Verification Tools (SV-COMP)

Among other plugins and libraries, Ultimate contains several program verification tools with which we participate in the International Competition on Software Verification (SV-COMP). In this competition, various fully-automatic verifiers and bug finding tools from academia and industry compete, to see which tool can successfully analyse the most programs wrt. a given property. We currently compete with 4 tools: Automizer, Taipan, Kojak and GemCutter.

Ultimate Automizer

Contact: Matthias Heizmann

Automizer uses trace abstraction to generalize infeasibility proofs for single program traces to Floyd-Hoare automata that cover larger parts of the program. For concurrency, it uses a Petri-net-based automata model.

More Information & Web Interface

Publications about Automizer

To cite:

@inproceedings{sas09:trace-abstraction,
  author    = {Matthias Heizmann and Jochen Hoenicke and Andreas Podelski},
  editor    = {Jens Palsberg and Zhendong Su},
  title     = {Refinement of Trace Abstraction},
  booktitle = {Static Analysis, 16th International Symposium, {SAS} 2009, Los Angeles,
               CA, USA, August 9-11, 2009. Proceedings},
  series    = {Lecture Notes in Computer Science},
  volume    = {5673},
  pages     = {69--85},
  publisher = {Springer},
  year      = {2009},
  doi       = {10.1007/978-3-642-03237-0\_7},
}

Ultimate Taipan

Contact: Daniel Dietsch

Taipan uses abstract interpretation with various domains to find loop invariants for path programs. Proofs for path programs are combined using automata operations on Floyd-Hoare-automata. If abstract interpretation cannot find a proof, trace abstraction is used. For concurrency, it uses an explicit product of finite automata.

More Information & Web Interface

Publications about Taipan

To cite:

@inproceedings{sas17:loop-inv-from-ctex,
  author    = {Marius Greitschus and Daniel Dietsch and Andreas Podelski},
  editor    = {Francesco Ranzato},
  title     = {Loop Invariants from Counterexamples},
  booktitle = {Static Analysis - 24th International Symposium, {SAS} 2017, New York,
               NY, USA, August 30 - September 1, 2017, Proceedings},
  series    = {Lecture Notes in Computer Science},
  volume    = {10422},
  pages     = {128--147},
  publisher = {Springer},
  year      = {2017},
  doi       = {10.1007/978-3-319-66706-5\_7}
}

Ultimate Kojak

Contact: Frank Schüssele

Kojak analyses programs using an extension of the Lazy Interpolants CEGAR scheme.

More Information & Web Interface

Publications about Kojak

To cite:

@inproceedings{tacas14:kojak,
  author    = {Evren Ermis and Alexander Nutz and Daniel Dietsch and Jochen Hoenicke and Andreas Podelski},
  editor    = {Erika {\'{A}}brah{\'{a}}m and Klaus Havelund},
  title     = {Ultimate Kojak - (Competition Contribution)},
  booktitle = {Tools and Algorithms for the Construction and Analysis of Systems - 20th International Conference, {TACAS} 2014,
               Held as Part of the European Joint Conferences on Theory and Practice of Software, {ETAPS} 2014, Grenoble, France, April 5-13, 2014. Proceedings},
  series    = {Lecture Notes in Computer Science},
  volume    = {8413},
  pages     = {421--423},
  publisher = {Springer},
  year      = {2014},
  doi       = {10.1007/978-3-642-54862-8\_36},
}

Ultimate GemCutter

Contact: Dominik Klumpp

GemCutter is a verifier for concurrent programs based on commutativity, i.e., the observation that for certain statements from different threads, the execution order does not matter. It integrates partial order reduction algorithms (that take advantage of commutativity) with a trace abstraction-based CEGAR scheme.

Publications about GemCutter

To cite:

@inproceedings{pldi22:sound-sequentialization,
  author    = {Azadeh Farzan and Dominik Klumpp and Andreas Podelski},
  editor    = {Ranjit Jhala and Isil Dillig},
  title     = {Sound sequentialization for concurrent program verification},
  booktitle = {{PLDI} '22: 43rd {ACM} {SIGPLAN} International Conference on Programming
               Language Design and Implementation, San Diego, CA, USA, June 13 - 17, 2022},
  pages     = {506--521},
  publisher = {{ACM}},
  year      = {2022},
  doi       = {10.1145/3519939.3523727},
}

ultimate's People

Contributors

alexandernutz avatar breee avatar buehlery avatar confectio avatar danieldietsch avatar dennis95 avatar dkuechler avatar ebbima avatar greitsch avatar gschievelbein avatar hauff avatar heizmann avatar henkele avatar jonaswerner avatar langenfeld avatar lawki avatar lf274 avatar liyong31 avatar maul-esel avatar maxbarth95 avatar mostafa-mahmoud avatar naouarmehdi avatar nuberd avatar numairmansur avatar philippmue avatar rohlandm avatar schaetzc avatar schillic avatar schuessf avatar zabuzard avatar

Stargazers

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

Watchers

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

ultimate's Issues

C backtranslation fails

Input:programs/regression/c/BugForLoop01.c
Settings:settings/automizer/TreeInterpolants.epf
Toolchain:toolchains/AutomizerC.xml

fails as follows

NullPointerException: null: de.uni_freiburg.informatik.ultimate.plugins.generator.cacsl2boogietranslator.CACSL2BoogieBacktranslator$CheckForSubtreeInclusion.check(CACSL2BoogieBacktranslator.java:819)

Additional termination specifications

Currently, our termination analysis analyzes all loops of a program. It would be better if we could specify which loop should be analyzed.

More precisely, which location may not appear infinitely often.
This could be achieved with something like
//@assert isFinite() or __VERIFIER_assert_isFinite()

SmtLib-HORN to Horn Clause Graph plugin

Write a fresh Ultimate plugin which takes a smtlib-file which uses "set-logic HORN" and builds the Horn Clause graph from it.
See also
https://github.com/ultimate-pa/ultimate/wiki/Tree-Automizer

Subtasks

  • Integrate smtlib-parser into Ultimate
  • implement conversion to a hyper graph
    • edges are labelled with a variant of TransitionFormula
    • nodes correspond to uninterpreted predicate symbols
      (..)

1 week
create a plugin "HornClauseGraphBuilder"
procedure right now:
copy an existing one, that is similar (RCFGBuilder), delete all code, except base classes (.. Activator, ~Observer, ~.java) rename in every place, also in plugin.xml
use smtlib2 parser from smtInterpol
alex: find out how to get the parser into ultimate
build the graph
alex: organize the graph base classes

Support for standard libraries: string(s).h

Support all methods from string.h and from strings.h the following.

  • int bcmp(const void *, const void *, size_t); /* LEGACY, see memcmp */
  • void bcopy(const void *, void *, size_t); /* LEGACY, see memcpy, memmove */
  • void bzero(void *, size_t); /* LEGACY, see memset */

Feature Request: Possibility to create small data structure mock-ups for unit testing

For unit testing of some low-level implementations, it would be desirable to be able to create mock-ups of small data structures, such as a BoogieVar, without having to parse a whole Boogie program with a full Ultimate tool chain.

Currently, the creation process of a BoogieVar needs some SMT TermVariables, and ApplicationTerms which are not be available if one doesn't want to parse a whole Boogie program. Therefore, perform unit testing only on methods (without the whole Ultimate back-end) that require BoogieVars is impossible. For example, if a function that should be tested computes some values for which only the existence of BoogieVars is necessary, but the semantics of said BoogieVars is irrelevant, it would be nice to be able to create instances of BoogieVars which serve that purpose.

Additionally, it would also be nice to be able to create mock-ups of Boogie CodeBlocks from strings. E.g. by using "var x : int; x := 5", the CodeBlock data structure for those two statements is created (through parsing) to be able to test e.g. implementations that handle assignment operations.

Extend enum support

2Byte, 4 Byte, smallest signed first, smallest unsigned first, smallest signed only (additionally min/max number of bytes as boundaries)

trunk/source/Website/WebContent/json missing

For building the webinterface, we the folder
trunk/source/Website/WebContent/json
is needed. Problem: Git does not support empty folders.
How should we fix this?

  1. Add an auxiliary file in the folder.
  2. Let convertHTMLtoJSON.jar create the folder.
  3. ???

Installation Problems

I'm on Ubuntu 14.04 (Gnome Shel 3.10.4)
I installed Eclipse CDT (Mars)
I installed ultimate according to the instructions

After importing the Projects, there are 57 errors in the Projects SpaceExParser, Website, WebstieEclipseBridge - see screenshot.

Assuming this is normal and not critical:

  • This might confuse people (as it does me) when there are other problems with the installation process - I would strongly recommend adding that as a side note to the installation instruction page.

otherwise

  • What is possibly missing/wrong with my installation?

Secondly the Create Run Configuration part failed.
After clicking "Launch an Eclipse application", the launch process fails.
error log on pastebin (Sadly github fails to accept the log file.)

screenshot from 2015-09-25 22 33 57

eclipseinstall

Write (unit) tests for HornClauseGraphBuilder

Tests are smt2 scripts, right now (maybe something else later)

Things to test:
Parser part:

  • is the full horn clause grammar in SMTLib recognized? (as specified on the sv-comp horn clause page referenced in the wiki?)
  • is the right set of HornClauses extracted?
    Graph builder part:
    • is the hypergraph built correctly?

(might be extended -- what else to test?)

Add installation instructions for SVComp repository to the Wiki

Currently, when the SVComp benchmarks should be used for testing (e.g. with maven), one needs to take a look into trunk/examples/externalRepositories.txt for instructions on how to add the SVComp repository to the examples directory.

This process should be documented in the Wiki as well.

Commit local .gitignore files?

Eclipse 4 creates by default .gitignore in most directories to avoid tracking the /bin subdirectories. Shouldn't those be commited to the repository anyway? How do you handle them otherwise?

Remove pointers by inlining / duplicating functions

In certain situations, pointers can be completely resolved by duplicating functions. If this allows the removal of all pointers of a program, it can improve our performance greatly.

Real-world code often uses pointers for stateless library functions, where this could be beneficial.

See GasCake02 vs GasCake02_Pointerless for an example.

Convert SMTLibException to Timeout

In some cases, Ultimate dies because the SMTSolver ran into a timeout. Currently, we convert this situation to an error, although it should be a timeout.

This behavior should be changed, possibly in Executor or Scriptor.

Example stack trace:

[2016-02-17 13:39:26,265 ERROR L194        ToolchainWalker]: The Plugin de.uni_freiburg.informatik.ultimate.plugins.generator.traceabstraction has thrown an Exception!
de.uni_freiburg.informatik.ultimate.logic.SMTLIBException: line 15920 column 10: canceled
        at de.uni_freiburg.informatik.ultimate.smtsolver.external.Parser$Action$.CUP$do_action(Parser.java:1339)
        at de.uni_freiburg.informatik.ultimate.smtsolver.external.Parser.do_action(Parser.java:584)
        at java_cup.runtime.LRParser.parse(LRParser.java:419)
        at de.uni_freiburg.informatik.ultimate.smtsolver.external.Executor.parse(Executor.java:204)
        at de.uni_freiburg.informatik.ultimate.smtsolver.external.Executor.parseCheckSatResult(Executor.java:226)
        at de.uni_freiburg.informatik.ultimate.smtsolver.external.Scriptor.checkSat(Scriptor.java:222)
[...]

Fix backtranslation errors in GasCake05

  • In L906 decimalNumber_s32 occurs two times with different values
  • In L910 is a \read(decimalNumber_s32) with a negative value, and afterwards decimalNumber_s32 with the same value

Fix AI bug "recursive-wrong-prestate.bpl"

examples/programs/abstractInterpretation/regression/recursive-wrong-prestate.bpl

// Wrong (not inductive) transition and/or state added by AI
// The second disjunct of the hierachical pre state is probably the reason.
//
// PreState: (and (= foo_bla 0) (= foo_res 0))
// HierachicalPreState (or (<= 1 foo_bla) (<= (+ foo_bla 1) 0))
// Trans: return;
// Post: (and (= foo_res 0) (<= 1 foo_bla))

Improve human-readable error path display

Currently, the value part of our error paths does not mention the scope of the variables. This can lead to complicated situations were users cannot distinguish between masked variables.

Possible solution:

  • mark global variables as global
  • prefix variable names with their scope, e.g. ::::::::

Support additional reachability specifications

It would be beneficial to allow additional specifications:

  • Global assertions (semantics as in LTL formula []P)
  • Global assumptions (fix initial value of global or static variable to something different than 0 or *, add assume to havoc for volatile variables )

Fix CLI "options before toolchain" error

The new CLI controller fails if there are options before the toolchain argument, because the toolchain help parser runs before and is not aware of those options.

Incorrect translation of switch statements

We are unsound for the following input.

Program:programs/regression/c/Switch02.c 
Settings:settings/automizer/ForwardPredicates.epf 
Toolchain:toolchains/AutomizerC.xml

Presumed problem: In contradicion to the C standard, the controlling expression is converted to int.

Support for standard libraries: stdio.h

Support the following functions from stdio.h.

  • sprintf
  • sscanf
  • fprintf
  • fscanf
  • fopen
  • freopen
  • fflush
  • fclose
  • setbuf
  • setvbuf
  • fwide
  • fread
  • fwrite
  • ftell
  • fgetpos
  • fseek
  • fsetpos
  • rewind
  • remove
  • rename
  • tmpfile
  • tmpnam

Support new LTL specification __VERIFIER_ltl_step()

We want to specify at which location an LTL step is allowed to take place. We can do this with ghost variables, but a designated specification can be used during product construction to drastically reduce the size of the product.

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.