egglog 3.0.0

egglog is a language that combines the benefits of equality saturation and datalog. It can be used for analysis, optimization, and synthesis of programs. It is the successor to the popular rust library egg.
Documentation
(sort IntPair (Pair i64 i64))
(let p (pair 1 2))
(check (= (pair-first p) 1))
(check (= (pair-second p) 2))
(let q (pair 3 4))
(check (= (pair-first q) 3))
(check (= (pair-second q) 4))

; test equality
(check (= p (pair 1 2)))
(check (!= p q))

; test with string second element
(sort StrPair (Pair i64 String))
(let sp (pair 10 "hello"))
(check (= (pair-first sp) 10))
(check (= (pair-second sp) "hello"))

; test pair with eq sort and rebuilding
(datatype Math (Num i64))
(sort MathPair (Pair Math i64))
(let a (Num 1))
(let b (Num 2))
(let mp (pair a 42))
(check (= (pair-first mp) a))
(check (= (pair-second mp) 42))
(union a b)
(run 1)
(check (= (pair-first mp) b))