JHU-PL-Lab / sato

Sato, the Symbolic Analysis Typechecker for Odefa, dynamically locates type errors using demand-driven symbolic execution.
3 stars 0 forks source link

Sato

"I am so embarrassed. My name's Asami. Let me make this up to you somehow. Uh...how about I treat you to dinner?" - Asami Sato, The Legend of Korra

Sato, the Symbolic Analysis Typechecker for Odefa, dynamically locates type errors using demand-driven symbolic execution.

Install

For MacOS, first install the requisite OCaml version: 4.09.0+flambda.

brew upgrade opam
opam update
opam switch create 4.09.0+flambda

(For Linux, replace brew with apt get.)

Run this to produce libraries needed

# dune external-lib-deps --missing @@default

Now we can install the dependencies for Sato.

opam install shexp core batteries gmap jhupllib monadlib ocaml-monadic pds-reachability ppx_deriving ppx_deriving_yojson -y

For Z3, we need to pin it to version 4.8.1 due to a bug with later versions; then we need to export the path Z3 is installed on:

opam pin z3 4.8.1 -y
export LD_LIBRARY_PATH=`opam config var z3:lib`

Run

To build Sato itself, run the make command (which is itself an alias for the make sato command); we can also run make ddpa and make translator in order to build other utilities which may be useful for debugging. The basic usage of Sato is as follows:

./sato <filename>

where <filename> refers to a .odefa or .natodefa file that Sato will typecheck. For the full command list, run ./sato --help.

To run tests on Sato (as well as DDPA and DDSE), run the make test command.

TODOs

TODOs for theory refactor

TODOs for 100% coverage algorithm

More TODOs