Legend:
Library
Module
Module type
Parameter
Class
Class type
This module implements a generic EGraph-based equality saturation engine that operates over arbitrary user-defined languages and provides support for extensible custom user-defined EClass analyses.
The main interface to EGraph is provided by the functor Make which constructs an EGraph given a LANGUAGE and ANALYSIS, ANALYSIS_OPS.
A generic representation of an EGraph, parameterised over the language term types 'node, analysis state 'analysis and data 'data and read permissions 'permission.
The module Query encodes generic patterns (for both matching and transformation) over expressions and is part of Ego.Generic's API for expressing rewrites.
The module Scheduler provides implementations of some generic schedulers for Ego's equality saturation engine.
Read/Write permissions
For convenience, the operations over the EGraph are split into those which read and write to the graph rw t and those that are read-onlyro t. When defining the analysis operations, certain operations assume that the graph is not modified, so these anotations will help users to avoid violating the internal invariants of the data structure.
This module type RULE defines the rewrite interface for an EGraph, allowing users to express relatively complex transformations of expressions over some language.