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
- return
- else
M[a] = {n}, return id ofa
- if
2.2 Equality Saturation
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)を持つべき
- e-class に e-node が追加されたときなど が変更された時の処理, 冪等性
-
join semilattice になる