  We introduce Metatheory.jl: a lightweight and performant general purpose
symbolics and metaprogramming framework meant to simplify the act of writing
complex Julia metaprograms and to significantly enhance Julia with a native
term rewriting system, based on state-of-the-art equality saturation
techniques, and a dynamic first class Abstract Syntax Tree (AST) pattern
matching system that is dynamically composable in an algebraic fashion, taking
full advantage of the language's powerful reflection capabilities. Our
contribution allows to perform general purpose symbolic mathematics,
manipulation, optimization, synthesis or analysis of syntactically valid Julia
expressions with a clean and concise programming interface, both during
compilation or execution of programs.
