2. Background

2.1 E-graphs

  • 項間の合同関係を保持
    • Automated Theorem Provers(ATP) 定理証明系で使われている

def. E-graph

E-graph

  • union-find構造 は e-class idとして等しい関係() を保持
  • e-classのマップ は e-class から e-classesへの写像
    • iff
  • e-classはidを持つが, e-nodeはそうではない.

def. canonicalization

  • find(U, a) = find(U, b) iff となるための findを は提供する
  • e-class が canonical iff find(a) = a
  • e-node が canonical iff n = canonicalize(n)
    • canonicalize(f(a_1, a_2, \cdots)) = f(find(a_1), find(a_2), \cdots)

def. representation of terms

  • e-graph は e-class の項を表す
  • e-class は e-node の項を表す
  • e-node は同一の関数のシンボル の項 を表し, e-class を表す

def. Equivalence

e-graphは3つの合同関係を表す

  • e-class idの同一性 iff find(a) = find(b)
  • e-node の同一性 iff が同一の e-class を持っている
  • 項の同一性 iff が同一のe-classで表される場合

def. congruence

はe-nodeの合同関係を表す. s.t iff

2.1.3 Interface and Rewriting

E-graphは2つの操作を提供

  • add(n: e-node)
    • if lookup(n) = a
      • return a
    • else
      • M[a] = {n}, return id of a

2.2 Equality Saturation

todo

3. Rebuilding

4. E-class analyses

4.1 E-class Analyses

domain , 各 e-class に紐付く値

    • 新しい e-node に追加され, e-classに が作成され, に紐付くデータ を作成
    • e-class にmergeされるとき, から を作成する
    • e-class に e-node が追加されたときなど が変更された時の処理, 冪等性 modify(modify(c)) = modify(c) を持つべき
  • join semilattice になる

6. Case Studies

6.1 Herbie: Improving Floating Point Accuracy

6.2 Spores

6.3 Szalinski