This is repo for the egglog
tool accompanying the paper
"Better Together: Unifying Datalog and Equality Saturation"
(ACM DL, arXiv).
If you use this work, please use this citation.
See also the Python binding, which provides a bit more documentation: https://egglog-python.readthedocs.io/
There is a Zulip chat about egglog here: https://egraphs.zulipchat.com/#narrow/stream/375765-egglog
apt-get install make cargo
cargo install cargo-nextest
make all
cargo run [-f fact-path] [-naive] [--to-json] [--to-dot] [--to-svg] <files.egg>
or just
cargo run
for the REPL.
- The
--to-dot
command will save a graphviz dot file at the end of the program, replacing the.egg
extension with.dot
. - The
--to-svg
, which requires Graphviz to be installed, will save a graphviz svg file at the end of the program, replacing the.egg
extension with.svg
.
We recommend hatoo's egglog-language extension (just search for "egglog" in VS Code).
To run the tests use make test
.
To view documentation, run cargo doc --open
.
TODO migrate the following documentation to cargo doc:
Signed 64-bit integers supporting these primitives:
+ - * / % ; arithmetic
& | ^ << >> not-i64 ; bit-wise operations
< > <= >= ; comparisons
min max log2
to-f64
to-string
64-bit floating point numbers supporting these primitives:
+ - * / % ; arithmetic
< > <= >= ; comparisons
min max neg
to-i64
to-string
A map from a key type to a value type supporting these primitives:
empty
insert
get
not-contains
contains
set-union
set-diff
set-intersect
map-remove
Rational numbers (fractions) with 64-bit precision for numerator and denominator with these primitives:
+ - * / ; arithmetic
min max neg abs floor ceil round
rational ; construct from a numerator and denominator
numer denom ; get numerator and denominator
pow log sqrt
< > <= >= ; comparisons
These primitives are only defined when the result itself is a pure rational.
Use double quotes to get a quote: "Foo "" Bar"
is Foo " Bar
.
No primitives defined.