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
;; Two sorts, like the original
(sort Exp)
(sort Stmt)
(constructor UF_Exp (Exp Exp) Exp)
(constructor UF_Stmt (Stmt Stmt) Stmt)
(constructor View (Exp Stmt) Stmt)
(constructor E () Exp)
(constructor S1 () Stmt)
(constructor S2 () Stmt)

(let $e (E))
(let $s1 (S1))
(let $s2 (S2))

;; UF_Exp: $e -> $e (same, bool-!= = false)
;; UF_Stmt: $s1 -> $s2 (diff, bool-!= = true)
(UF_Exp $e $e)
(UF_Stmt $s1 $s2)
(View $e $s1)

;; Should fire: or(false, true) = true
(check (View c1 c2)
       (UF_Exp c1 c1_leader)
       (UF_Stmt c2 c2_leader)
       (guard (or (bool-!= c1 c1_leader) (bool-!= c2 c2_leader))))