egraphs-good/egglog

API-supported way for translating between `Value`s in an `egglog::EGraph` and `ClassID`s in an `egraph_serialize::EGraph`

gussmith23 opened this issue · 1 comments

For a number of reasons which are generally summed up by this issue, I often need to work with both egglog::EGraphs and egraph_serialize::EGraphs. It would be great to have an API-supported, stable way of translating between Values in an EGraph and EClass IDs in a serialized EGraph. As @saulshanabrook pointed out to me, it seems like the process of serialization uses a Value's index into the hashcons to generate its corresponding EClass ID, so that's a hacky way of going back and forth:

egglog/src/serialize.rs

Lines 104 to 105 in 0da3209

let canonical: usize = self.unionfind.find(Id::from(id)).into();
let canonical_id: egraph_serialize::ClassId = canonical.to_string().into();

However, it would give me peace of mind to have a way of doing this that's library-supported!

Thanks all!

I can work on adding to the public API functions to go from the e-class ID to Value and vice versa.