Giter Club home page Giter Club logo

uclidfc's Introduction

First-Class Modules in Uclid5

This is a fork of Uclid5 that accommodates first-class modules and thus significantly changes the internal representation. This work is possible thanks to these contributors, and all code is covered by this license. The goal is ultimately to combine this fork with the main repository. If you use either version of Uclid5 in your work, please cite the original Uclid5 MEMOCODE'18 paper.

@inproceedings{seshia18uclid5,
  author    = {Sanjit A. Seshia and Pramod Subramanyan},
  title     = {{UCLID5:} Integrating Modeling, Verification, Synthesis and Learning},
  booktitle = {16th {ACM/IEEE} International Conference on Formal Methods and Models
               for System Design ({MEMOCODE})},
  pages     = {1--10},
  publisher = {{IEEE}},
  year      = {2018},
  doi       = {10.1109/MEMCOD.2018.8556946},
  location  = {Beijing, China}
}

Beyond first-class modules, this fork also carefully realizes the synthesis encoding described in this SYNT '20 workshop paper.

Usage

Dependencies

Compile

Just add the bin folder to your path: uclidfc will automatically compile the first time you run it. Note, uclidfc will not automatically recompile if you make changes to its source code. To recompile, run sbt assembly.

Run

uclidfc [options] <file> ...

Basic Usage
  -m, --main <module>            Name of the main module.
  -s, --solver <solver>          Solver to use (alt_ergo or cvc4 or vampire or z3). Solver must be in your path.
  -t, --timeout <timeout>        Timeout (in whole seconds) to give the solver per query.
  -w, --write <file>             Write query to <file>.
  --pretty-print                 Try to make output queries human readable.
  --debug-print                  Add internal term graph information as SMT comments.
  --skip-solver                  Don't run the solver.
  --single-thread                Don't run solvers in parallel.
  <file> ...                     List of input files.

Analysis
  --print-features               Print query features.

Algebraic Datatype Rewrites
  --blast-enum-quantifiers       Rewrite quantifiers over enums to finite disjunctions/conjunctions.

In SMT mode (when you call uclidfc on .smt2 files) uclidfc will iterate over the files. If you give uclidfc multiple solver arguments, uclidfc will automatically select the solver to use. So, the following command will, for each query in models/tests/smt2/, print the query features, and use either z3 or cvc4 to solve the query.

uclidfc models/tests/smt2/* --print-features -s cvc4 -s z3

Live Edit

# depends on fswatch (`brew install fswatch`)
uclidfc-live <uclid files to edit> <query file to watch>

Develop

Check Coverage

sbt jacoco
open target/scala-3.0.0-RC1/jacoco/report/html/index.html

Run JVM

sbt "run [options] <file> ..."

uclidfc's People

Contributors

federicoaureliano avatar polgreen avatar

Stargazers

Aman Goel avatar Kamyar Mohajerani avatar Kevin Laeufer avatar

Watchers

James Cloos avatar  avatar Ankush Desai avatar  avatar Nikhil Pimpalkhare avatar

Forkers

ekiwi

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.