g2-0.1.0.0: README.md
## G2 Haskell Symbolic Execution Engine
---
#### About
G2 performs lazy symbolic execution of Haskell programs to detect state reachability.
It is capable of generating assertion failure counterexamples and solving for higher-order functions.
---
#### Dependencies
* GHC 8.2.2: https://www.haskell.org/ghc/
* Custom Haskell Standard Library: https://github.com/AntonXue/base-4.9.1.0
* Z3 SMT Solver: https://github.com/Z3Prover/z3
---
#### Setup:
1) Install GHC 8.2.2 (other GHC 8 versions might also work)
2) Install Z3
3) Either:
a) Pull the Custom Haskell Standard Library into ~/.g2 by running `bash base_setup.sh`
b) Manually pull the base library. Add a file to the G2 folder, called g2.cfg that contains:
`base = /path/to/custom/library`
---
#### Command line:
###### Reachability:
`cabal run G2 ./tests/Samples/Peano.hs add`
###### LiquidHaskell:
`cabal run G2 -- --liquid ./tests/Liquid/Peano.hs --liquid-func add`
###### Arguments:
* `--n` number of reduction steps to run
* `--max-outputs` number of inputs/results to display
* `--smt` Pass "z3" or "cvc4" to select a solver [Default: Z3]
* `--time` Set a timeout in seconds
---
#### Authors
* Bill Hallahan (Yale)
* Anton Xue (Yale)
* Maxwell Troy Bland (UCSD)
* Ranjit Jhala (UCSD)
* Ruzica Piskac (Yale)