Skip to content

Commit 519f1d1

Browse files
committed
feat(core): integrate e-graph equality saturation into blt symbolic isolation
1 parent 910841a commit 519f1d1

1 file changed

Lines changed: 11 additions & 1 deletion

File tree

  • packages/core/src/compiler/modelica

packages/core/src/compiler/modelica/blt.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import {
1010
ModelicaSimpleEquation,
1111
} from "./dae.js";
1212
import { isolateSymbolically } from "./symbolic.js";
13+
import { egraphSimplify } from "./symbolic/egraph.js";
1314

1415
/**
1516
* Visitor that collects all variable names referenced in an expression/equation.
@@ -68,13 +69,22 @@ function isExplicitlySolvableFor(eq: ModelicaEquation, v: string): boolean {
6869

6970
/**
7071
* Attempt to symbolically isolate `v` from a `ModelicaSimpleEquation`.
72+
*
73+
* Before isolation, applies E-Graph Equality Saturation to simplify both sides
74+
* of the equation (constant folding, identity elimination, exp/log/trig identities).
75+
* This canonicalization improves the chance of successful symbolic isolation.
76+
*
7177
* Returns a new explicit equation `v = expr` if successful, or null.
7278
*/
7379
function trySymbolicIsolation(eq: ModelicaEquation, v: string): ModelicaSimpleEquation | null {
7480
if (!(eq instanceof ModelicaSimpleEquation)) return null;
7581
if (!eq.expression1 || !eq.expression2) return null;
7682

77-
const result = isolateSymbolically(eq.expression1, eq.expression2, v);
83+
// E-Graph pre-simplification: canonicalize expressions before isolation
84+
const lhs = egraphSimplify(eq.expression1);
85+
const rhs = egraphSimplify(eq.expression2);
86+
87+
const result = isolateSymbolically(lhs, rhs, v);
7888
if (!result) return null;
7989

8090
const nameExpr = new ModelicaNameExpression(v);

0 commit comments

Comments
 (0)