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
(datatype Math
  (A)
  (B)
  (Pair Math Math))

(relation Trigger ())

(rule ((Trigger))
      ((union (A) (B))
       (let x0 (Pair (A) (B)))
       (let x1 (Pair x0 x0))
       (let x2 (Pair x1 x1))
       (let x3 (Pair x2 x2))
       (let x4 (Pair x3 x3))
       (let x5 (Pair x4 x4))
       (let x6 (Pair x5 x5))
       (let x7 (Pair x6 x6))
       (let x8 (Pair x7 x7))
       (let x9 (Pair x8 x8))
       (let x10 (Pair x9 x9))
       (let x11 (Pair x10 x10))
       (let x12 (Pair x11 x11))
       (let x13 (Pair x12 x12))
       (let x14 (Pair x13 x13))
       (let x15 (Pair x14 x14))
       (let x16 (Pair x15 x15))
       (let x17 (Pair x16 x16))
       (let x18 (Pair x17 x17))
       (let x19 (Pair x18 x18))
       (let x20 (Pair x19 x19))
       (let x21 (Pair x20 x20))
       (let x22 (Pair x21 x21))
       (let x23 (Pair x22 x22))
       (let x24 (Pair x23 x23))
       (let x25 (Pair x24 x24))
       (let x26 (Pair x25 x25))
       (let x27 (Pair x26 x26))
       (Pair x27 x27))
      :name "direct-union-with-heavy-tail")

(Trigger)
(run 1)

(check (= (A) (B)))